程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 符號文件——Windows應用程序調試必備

符號文件——Windows應用程序調試必備

編輯:關於VC++

一、何謂符號文件?

符號文件(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->Options);

單擊 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),打開項目設置對話框;

在 “Settings for”列表中選擇項目的 Release 配置;

單擊 “C/C++”標簽;

在“Category”下拉列表框中選擇 “General”選項;

在“Debug info”下拉列表框中選擇調 試信息格式(具體選項參見圖一),在此不必禁用任何優化選項;

單擊 “Link”標簽;

在“Category”下拉列表框中選擇 “Debug”選項;

選中“Debug info”復選框,然後選擇需 要的鏈接調試類型(具體選項參見圖一);

不要選擇“Separate types”復選框;

在“Project options”編輯框的最後添加如下 指令:/opt:ref,icf;

重新生成(Rebuild)項目;

在 Visual C++ .NET 2003 中的方法:

打開 Visual C++ .NET 的項目文件(*.vcproj);

進入 Project 菜單,選擇 Settings 菜單項 (Project->Settings),打開項目設置對話框 ;

在 “配置”下拉列表中選擇項目的 “(活動) Release” 配置;

選擇“配置屬性”樹型節點中的 “C/C++” ==〉“常規”;

設置右邊的“調試信息格 式”選項(具體選項參見圖一);

選擇“配置屬性”樹型節點中 的“鏈接器”==〉“調試”;

設置右邊的“生成程序 數據庫文件”(具體選項參見圖一);

選擇“配置屬性”樹型節 點中的“鏈接器”==〉“命令行”;

在“附加選項 (D)”編輯框中添加如下指令:/opt:ref,icf;

按“確定”退出 ;

重新生成(Rebuild)項目;

圖一

五、關於 Free Build(也稱 Retail Build)和 Checked Build(也稱 Debug Build)

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

Free Build (或 Retail Build)

Checked Build (或 Debug Build)

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 裡面輸入路徑:

SRV*D:\Symbols\websymbols*http://msdl.microsoft.com/download/symbols

(斜體部分是你在本地保存符號文件的路徑)

如果你不是通過代理上網 ,那麼在你用 WinDbg 打開一個被調試程序後,輸入 symchk 回車,WinDbg 就會自動的 連到微軟的網站根據你的機器的情況更新的 PDB 文件,並將它保存在上面斜體部分指定 的本地路徑裡,這樣你就可以確保你的符號文件版本和你機器上的文件版本一致。

如果你是通過代理上網那麼你需要配置 IE 的連接設置。具體方法恕不贅言。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved