windbg是一個內核模式和用戶模式調試器,包含在Windows調試工具中。在這里,提供個實踐練習,幫助我們開始使用windbg作為用戶模式調試器。
用WinDbg調試記事本
1、導航到安裝目錄,然后打開windbg.exe。
2、在“文件”菜單上,選擇“打開可執行文件”。在“打開可執行文件”對話框中,導航到包含notepad.exe的文件夾(例如,C:\windows\system32)。輸入notepad.exe作為“文件名”。單擊“打開”。
3、在windbg窗口底部附近的命令行中,輸入以下命令:.sympath srv*.
輸出:
符號搜索路徑告訴windbg在哪里查找符號(pdb)文件。調試器需要符號文件來獲取有關代碼模塊(函數名、變量名等)的信息。
輸入此命令,通知windbg執行符號文件的初始查找和加載:.reload
4、查看notepad.exe模塊的符號
請輸入以下命令:x notepad!*
注意:如果看不到任何輸出,請輸入.reload。要查看包含main的notepad.exe模塊中的符號,請輸入以下命令: x notepad!*main*
5、在記事本上設置斷點notepad!WinMain,輸入以下命令:bu notepad!WinMain
要驗證是否設置了斷點,請輸入以下命令:bl
6、運行,請輸入以下命令:g
記事本一直運行到winmain函數,然后中斷到調試器。
要查看在記事本進程中加載的代碼模塊列表,請輸入以下命令:lm
要查看堆棧跟蹤,請輸入以下命令:k
7、再次運行 g
8、要中斷記事本執行,請從“調試”菜單中選擇“中斷”。
9、觀察保存過程,要在zwwritefile處設置和驗證斷點,請輸入以下命令:
10、輸入g重新開始運行記事本。在記事本窗口中,輸入一些文本,然后從“文件”菜單中選擇“保存”。當涉及zwCreateFile時,正在運行的代碼將中斷。輸入k以查看堆棧跟蹤。

用Windbg調試自己的程序
void MyFunction(long p1, long p2, long p3) { long x = p1 + p2 + p3; long y = 0; y = x / p2; } void main () { long a = 2; long b = 0; MyFunction(a, b, 5); }
對於本練習,我們假設構建的應用程序(myapp.exe)和符號文件(myapp.pdb)位於C:\myapp\x64\debug中。我們還將假設應用程序源代碼位於C:\myapp\myapp中。
1、打開Windbg
2、在“文件”菜單上,選擇“打開可執行文件”。在“打開可執行文件”對話框中,導航到c:\myapp\x64\debug。輸入myapp.exe作為“文件名”。單擊“打開”。
3、輸入下面的命令:
.sympath+ C:\MyApp\x64\Debug
現在,windbg知道在哪里可以找到應用程序的符號和源代碼。
4、輸入下面的命令:

5、在“調試”菜單上,選擇“單步執行”(或按F11)。繼續單步執行,直到進入MyFunction。當您單步執行y=x/p2行時,應用程序將崩潰並進入調試器。輸出與此類似:
