Step2
設(shè)置好symbol server的環(huán)境變量
Set _NT_SYMBOL_PATH=srv*c:\symbols*http://msdl.microsoft.com/download/symbols
創(chuàng)建好c:\symbols目錄
(BTW,如果要設(shè)置http代理set _NT_SYMBOL_PROXY=proxy_server:port)
Step3
把WinDBG(CDB)安裝路徑加到path中(默認(rèn)是C:\Program Files\Debugging Tools for Windows)
設(shè)置CDB為默認(rèn)的JIT debugger
C:\>cdb -iae
Step4
使用vc6創(chuàng)建一個(gè)控制臺(tái)程序Crash,主程序?yàn)閏rash.cpp
1 // Crash.cpp : Defines the entry point for the console application.
2 //
3
4 #include "stdafx.h"
5
6 int main(int argc, char* argv[])
7 {
8 for(int i=0;i<10;++i)
9 printf("Hello World!%s\n",i);
10 return 0;
11 }
可以看到該程序就第九行有一個(gè)錯(cuò)誤,%s應(yīng)該寫成%d
Step 5
編譯生成release版本(這里我主要針對(duì)Release程序)
注意設(shè)置


最后會(huì)生成Crash.exe和Crash.pdb和其他一些中間文件
Step 6
運(yùn)行Release版本的crash.exe會(huì)出現(xiàn)crash,這時(shí)CDB會(huì)自動(dòng)attach到該進(jìn)程,開(kāi)始調(diào)試
出現(xiàn)如下畫面
Hello World!(null)
Microsoft (R) Windows Debugger Version 6.6.0007.5
Copyright (c) Microsoft Corporation. All rights reserved.
*** wait with pending attach
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 00400000 0040c000 D:\Test\Crash\Release\Crash.exe
ModLoad: 77f80000 77ffc000 C:\WINNT\system32\ntdll.dll
ModLoad: 7c570000 7c624000 C:\WINNT\system32\KERNEL32.dll
(e04.f18): Access violation - code c0000005 (!!! second chance !!!)
eax=00000001 ebx=7ffdf073 ecx=00000001 edx=7fffffff esi=7ffffffe edi=00000800
eip=004016dd esp=0012fcf8 ebp=0012ff50 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000206
*** WARNING: Unable to verify checksum for D:\Test\Crash\Release\Crash.exe
Crash!_output+0x49a:
004016dd 803800 cmp byte ptr [eax],0 ds:0023:00000001=??
0:000>
輸入.lines load source code information
輸入k命令查看堆棧
0:000> .lines
Line number information will be loaded
0:000> k
ChildEBP RetAddr
0012ff50 0040103f Crash!_output+0x49a
0012ff70 0040100e Crash!printf+0x1f
0012ff80 00401105 Crash!main+0xe [D:\Test\Crash\Crash.cpp @ 9]
0012ffc0 7c5989a5 Crash!mainCRTStartup+0xb4
0012fff0 00000000 KERNEL32!BaseProcessStart+0x3d
可以發(fā)現(xiàn)程序在Crash.cpp第9行crash
輸入q命令退出cdb,結(jié)束調(diào)試。