本文編寫了一個簡單能產生除數為0異常的程序,讓其運行,產生崩潰,通過drwtsn產生dmp文件,然后通過windbg分析dmp文件,定位程序bug。
目的:學習windbg基本功能使用。
程序源代碼:
void Crash(void)
{
int i = 1;
int j = 0;
i /= j;
}
void main(void)
{
Crash();
}
編譯環境:vc++6.0
編譯器設置:


這一步設置,要求對release版本不使用優化,如果使用優化,上面源代碼中Crash(void)函數將不被匯編。

這一步設置,產生release版本的調試符號表,為后續定位錯誤準備。
步驟:
1、 安裝drwtsn32

用戶可以通過drwtsn32命令,查看dmp文件會被保存在何處。
2、 安裝windbg,Windbg下載地址:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
3、 設置windbg
A、符號表路徑設置

其中;srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols設置的目的是下載該程序用到的操作系統相關的庫函數的符號表到本地。
B、源代碼路徑設置

C、dmp文件導入


上圖中紅色部分標明的地方,說明windbg已經分析出了程序異常的上下文環境,比如eip為00401018說明該地址處產生異常。

上圖為當前的調用堆棧,可知故障出在Crash函數里面。