標籤:search csdn 相對 from ram 速度 crt box nbsp
讓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。勾上此選項,調試速度會更快,但 pdb 載入相對較少,調試資訊較少,建議不勾選。
“Load symbols using the updated settings when the dialog is closed”
對話方塊關閉後,立刻載入符號表。勾上此選項可以立刻看到效果,調試速度當然會稍微慢一點,建議勾選。
點擊 OK 關閉對話方塊,設定便生效了。
:
設定過了,當然要看看效果啦。
我們先看看正常情況下 CallStack 的狀態,建立一個普通 Win32 程式,在InitInstance入口下個斷點,F5開啟調試,在 CallStack 視窗如下顯示:
我們可以看到,在最下面兩行中,資訊是灰掉的,kernel32.dll中那個函數調用了我們的wWinMainCRTStartup也看不到,進程最開始由哪個函數建立也看不到。
現在看看設定了 Symbol 時 CallStack 的狀態,建立一個普通 Win32 程式,在InitInstance入口下個斷點,F5開啟調試,在 CallStack 視窗如下顯示:
我們可以看到,程式是由kernel32.dll中的匯出函數“_BaseProcessStart”開始的,_BaseProcessStart調用了我們的wWinMainCRTStartup函數,然後程式就運行起來了。
當然設定 Symbol 的用處遠遠不止這些,其餘的就等您慢慢發現。
註:設定 Symbol 之後,調試速度會慢下來,如果無需知道系統函數是如何調用的,建議調試時不設定 Symbol。
讓Visual Studio載入Symbol(pdb)檔案