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


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

這一步設(shè)置,產(chǎn)生release版本的調(diào)試符號(hào)表,為后續(xù)定位錯(cuò)誤準(zhǔn)備。
步驟:
1、 安裝drwtsn32

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

其中;srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols設(shè)置的目的是下載該程序用到的操作系統(tǒng)相關(guān)的庫(kù)函數(shù)的符號(hào)表到本地。
B、源代碼路徑設(shè)置

C、dmp文件導(dǎo)入


上圖中紅色部分標(biāo)明的地方,說(shuō)明windbg已經(jīng)分析出了程序異常的上下文環(huán)境,比如eip為00401018說(shuō)明該地址處產(chǎn)生異常。

上圖為當(dāng)前的調(diào)用堆棧,可知故障出在Crash函數(shù)里面。