本文編寫了一個簡單能產(chǎn)生除數(shù)為0異常的程序,讓其運(yùn)行,產(chǎn)生崩潰,通過drwtsn產(chǎn)生dmp文件,然后通過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è)置,要求對release版本不使用優(yōu)化,如果使用優(yōu)化,上面源代碼中Crash(void)函數(shù)將不被匯編。

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

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

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

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


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

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