符號檔案 Windows 應用程式除錯必備

2021-04-14 02:16:42 字數 3915 閱讀 6947

2023年11月10日 10:02:00

符號檔案--windows 應用程式除錯必備一、何謂符號檔案?

符號檔案(symbol files)是乙個資料資訊檔案,它包含了應用程式二進位制檔案(比如:exe、dll等)除錯資訊,專門用來作除錯之用,最終生成的可執行檔案在執行時並不需要這個符號檔案,但你的程式中所有的變數資訊都記錄在這個檔案中。所以除錯應用程式時,這個檔案是非常重要的。用 visual c++ 和 windbg 除錯程式時都要用到這個檔案。

在 windows 系統中,符號檔案以 .pdb 為副檔名,比如:每個 windows 作業系統下有乙個 gdi32.dll 檔案,編譯器在編譯該 dll 的時候會產生乙個 gdi32.pdb 檔案,一旦你擁有了這個 pdb 檔案,那麼便可以用它來除錯並跟蹤到 gdi32.dll 內部。該檔案和二進位制檔案的編譯版本密切相關,比如修改了 dll 的輸出函式,再編譯該 dll,那麼原先的 pdb 檔案就過時了,不能再用老的 pdb 檔案來做除錯工作,而必須使用最新的 pdb 檔案版本。

visual c++ 編譯**後會在 debug 或者 release 目錄下生成乙個 pdb 檔案。一般情況下,符號檔案包括以下的資料資訊:

全域性變數(global variables);

區域性變數(local variables);

函式名和它們的入口位址(function names and the addresses of their entry points);

fpo 資料(frame pointer omission):frame pointer 是一種用來在呼叫堆疊(call stack)中找到下乙個將要被呼叫的函式的資料結構源**的行序號(source-line numbers);

二、如何得到和安裝符號檔案?

先確定你的作業系統(os)版本;

安裝符號檔案,對於符號檔案的安裝位置沒有特貝要求,可以安裝在任何目錄中;

設定環境變數,使得除錯工具(比如:visual c++、windbg、ntsd、drwatson 等)能找到符號檔案;

安裝符號檔案的注意事項:

如果是手動安裝符號檔案,有一點很重要,那就是宿主機(hostt computer)上的符號檔案必須與目標機器(target computer)上的 windows 版本相匹配。

這裡所謂的宿主機指的是執行除錯會話的機器,在典型的雙系統除錯會話環境中,宿主機可以是連線到目標機器的任何機器。目標機器指的是發生軟體元件、系統服務、應用程式或作業系統執行失敗的機器。也即是需要被除錯的機器,它是除錯會話關注的焦點。目標機器可以近在咫尺,也可以位於完全不同的地方。有時我們也將目標機器稱之為--被除錯者(debuggee),那麼與之對應,宿主機則可以稱為除錯者(debugger)。

三、在 visual c++ 使用符號檔案的方法

在 visual c++ 6.0 中的使用方法:

開啟 visual c++ 6.0 的 workspace 檔案(*.dsw);

進入 tools 選單,選擇 options 選單項 (tools-

單擊 directoties 標籤;

在 "show directories for"下拉列表中選擇 "executable files";

將符號檔案的路徑新增到 "directories" 路徑列表中;

單擊 ok 完成;

在 visual c++ .net 2003 中的使用方法:

開啟 visual c++ .net 的專案檔案(*.vcproj);

在解決方案管理器中選中要使用符號檔案的專案;

單擊右鍵進入專案屬性對話方塊;

選擇"配置屬性"中的"除錯";

在與"除錯"對應的"操作"選項中有乙個"符號路徑",在此新增符號檔案的路徑即可;

單擊 "確定" 完成;

四、如何產生 release 版本二進位制檔案對應的 pdb 檔案?

在 visual c++ 6.0 中的方法:

開啟 visual c++ 6.0 的 workspace 檔案(*.dsw);

進入 project 選單,選擇 settings 選單項 (project-

在 "settings for"列表中選擇專案的 release 配置;

單擊"c/c++"標籤;

在"category"下拉列表框中選擇"general"選項;

在"debug info"下拉列表框中選擇除錯資訊格式(具體選項參見圖一),在此不必禁用任何優化選項;

單擊"link"標籤;

在"category"下拉列表框中選擇"debug"選項;

選中"debug info"核取方塊,然後選擇需要的鏈結除錯型別(具體選項參見圖一);

不要選擇"separate types"核取方塊;

重新生成(rebuild)專案;

在 visual c++ .net 2003 中的方法:

開啟 visual c++ .net 的專案檔案(*.vcproj);

進入 project 選單,選擇 settings 選單項 (project-

在 "配置"下拉列表中選擇專案的 "(活動)release" 配置;

選擇"配置屬性"樹型節點中的"c/c++" ==〉"常規";

設定右邊的"除錯資訊格式"選項(具體選項參見圖一);

選擇"配置屬性"樹型節點中的"鏈結器"==〉"除錯";

設定右邊的"生成程式資料庫檔案"(具體選項參見圖一);

選擇"配置屬性"樹型節點中的"鏈結器"==〉"命令列";

按"確定"退出;

重新生成(rebuild)專案;

圖一五、關於 free build(也稱 retail build)和 checked build(也稱 debug build)

每個基於 nt 作業系統有兩種不同的程式生成模式,即:

free build 生成的是終端使用者版本,針對生成的二進位制檔案進行了徹底的優化,禁用了除錯斷言,並剝離了除錯資訊。這樣一來使可執行程式檔案更小,載入更快,使用的記憶體也更小。

checked build 生成的是測試和除錯版本。它包含額外的 free build 所沒有的錯誤檢查,引數驗證和除錯資訊,checked build 有助於隔離和跟蹤可能導致不可預見的行為的問題,比如記憶體溢位,不正確的裝置配置。雖然 checked build 提供了額外的保護,但與 free build 比較,它需要更多的記憶體開銷和磁碟空間。由於可執行程式包含符號除錯資訊;除錯時要執行附加的**、引數檢查和輸出除錯診斷資訊,從而導致效能下降。

六、系統符號檔案的更新方法

系統符號檔案指 windows 作業系統依賴的那幾個重要的 dll/sys 和可執行檔案對應的符號檔案,常見的比如:gdi32.dll、kernel32.dll、kerberos.dll、psapi.dll、user32.dll等,使用 windbg 除錯時,你就會發現系統符號檔案(pdb)有多重要,這些檔案都與本地的 os 密切相關,比如,windows 2000 打了sp補丁的話,那麼必須更新系統符號檔案才能進行相關除錯,原來的符號檔案與打補丁後的系統就會不匹配,怎麼辦呢? 可以通過網路來更新!象下面這樣在 windbg 的 symbols path 裡面輸入路徑:

符號檔案 Windows 應用程式除錯必備

一 何謂符號檔案?符號檔案 symbol files 是乙個資料資訊檔案,它包含了應用程式二進位制檔案 比如 exe dll等 除錯資訊,專門用來作除錯之用,最終生成的可執行檔案在執行時並不需要這個符號檔案,但你的程式中所有的變數資訊都記錄在這個檔案中。所以除錯應用程式時,這個檔案是非常重要的。用 ...

符號檔案 Windows 應用程式除錯必備

一 何謂符號檔案?符號檔案 symbol files 是乙個資料資訊檔案,它包含了應用程式二進位制檔案 比如 exe dll等 除錯資訊,專門用來作除錯之用,最終生成的可執行檔案在執行時並不需要這個符號檔案,但你的程式中所有的變數資訊都記錄在這個檔案中。所以除錯應用程式時,這個檔案是非常重要的。用 ...

符號檔案 Windows 應用程式除錯必備

符號檔案 windows 應用程式除錯必備一 何謂符號檔案?符號檔案 symbol files 是乙個資料資訊檔案,它包含了應用程式二進位制檔案 比如 exe dll等 除錯資訊,專門用來作除錯之用,最終生成的可執行檔案在執行時並不需要這個符號檔案,但你的程式中所有的變數資訊都記錄在這個檔案中。所以...