1. 程式人生 > >用VS2005(其他版本也可以)除錯dump檔案

用VS2005(其他版本也可以)除錯dump檔案



雖然windbg也可以除錯,但是如果用VS除錯dump檔案會更方便,畢竟它有強大的反彙編檢視、變數、堆疊、記憶體檢視等非常好用的功能。

從【File】選單選擇開啟dmp檔案,會生成一個solution。

然後設定原始碼路徑:右鍵solution屬性,選擇Debug source files,新增你要除錯的程式的程式碼路徑。(注意,如果你的原始碼跟要除錯的程式不完全一致,那麼需要在Tools->Option->Debuggin->General裡面去掉勾選Require source file exactly match the original version)

然後設定符號表:Tools選單->Option,選擇Debugging->Symbols,加入windows的符號表路徑。如果你本地沒有windows符號表,需要填上msdn的下載網址。

準備map檔案:如果你的exe是加了殼的,那麼可能需要map檔案來幫你找到具體出錯的函式。

開始除錯。

按F5開始,程式會斷下來,然後這個時候就可以看到出錯的程式碼地址,此時可以檢視呼叫棧,找到出錯鏈。如果有原始碼,就能顯示出原始碼,否則你可能需要根據地址去map檔案查詢是什麼函式,哪一行出錯了。

在不能顯示原始碼的情況下,你可以首先確定出錯的函式,然後開啟你的原始碼工程,執行程式讓它斷到那個函式,再選擇Debug->Windows->Disassmbly顯示反彙編程式碼。這樣經過比對dmp處的彙編程式碼與你自己的原始碼的彙編程式碼就可以比較容易的確定是在哪一行出錯了。

有些情況下,你可能需要檢視記憶體來還原出錯時的現場環境。這個時候就會用到暫存器變數(Autos)。可以參考幾個常用的變數: EAX, ECX,EDX,EBP,ESP,這對於檢視函式引數值以及this指標等非常有用,一旦確定了引數的指標地址,就可以根據記憶體檢視來分析現場的變數值。