讓Visual Studio載入Symbol(pdb)檔案
讓Visual Studio載入Symbol(pdb)檔案
在VC編譯工程的編譯連線階段,會產生Symbol檔案,也就是常說的 pdb 檔案。pdb 的全稱為 program database,在 MSDN 中的解釋為,pdb 檔案是一個在編譯和連結階段產生的,包含了型別和除錯符號資訊的二進位制檔案。pdb 檔案中包含了各個函式的符號表,也是進行 WinDbg 除錯必不可少的檔案。
既然 pdb 檔案是給偵錯程式使用的,那麼 Visual Studio 偵錯程式也就可以使用之。通過如下設定,Visual Studio 便可以在除錯過程中載入 pdb 檔案了。
Tools --> Options --> Debugging
在“Symbol file (.pdb) locations:”下面的控制元件中輸入微軟預設 pdb 檔案的下載路徑“http://msdl.microsoft.com/download/symbols”。
在“Cache symbols from symbol servers to this directory:”下的編輯框中輸入本地儲存路徑,如:D:/WinSymbols/MsDownSymbols。
下面兩個 CheckBox 的意思分別為:
“Search the above locations only when symbols are loaded manually”。
偵錯程式僅僅載入手動載入的 Symbol
“Load symbols using the updated settings when the dialog is closed”
對話方塊關閉後,立刻載入符號表。勾上此選項可以立刻看到效果,除錯速度當然會稍微慢一點,建議勾選。
點選 OK 關閉對話方塊,設定便生效了。
如圖所示:
設定過了,當然要看看效果啦。
我們先看看正常情況下 CallStack 的狀態,建立一個普通 Win32 程式,在InitInstance入口下個斷點,F5開啟除錯,在 CallStack 視窗如下顯示:
我們可以看到,在最下面兩行中,資訊是灰掉的,kernel32.dll
現在看看設定了 Symbol 時 CallStack 的狀態,建立一個普通 Win32 程式,在InitInstance入口下個斷點,F5開啟除錯,在 CallStack 視窗如下顯示:
我們可以看到,程式是由kernel32.dll中的匯出函式“_BaseProcessStart”開始的,_BaseProcessStart呼叫了我們的wWinMainCRTStartup函式,然後程式就執行起來了。
當然設定 Symbol 的用處遠遠不止這些,其餘的就等您慢慢發現。
注:設定 Symbol 之後,除錯速度會慢下來,如果無需知道系統函式是如何呼叫的,建議除錯時不設定 Symbol。