一、何謂符號檔案?
符號檔案(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) ;
在解決方案管理器中選中要使用符號檔案的項目;
單擊右鍵進入項目屬 性對話方塊;
選擇“配置屬性”中的“調試”;
在與 “調試”對應的“操作”選項中有一個“符號路徑”, 在此添加符號檔案的路徑即可;
單擊 “確定” 完成;