windbg是一個內核模式和用戶模式調試器,包含在Windows調試工具中。在這裏,提供個實踐練習,幫助咱們開始使用windbg做爲用戶模式調試器。windows
一、導航到安裝目錄,而後打開windbg.exe。app
二、在「文件」菜單上,選擇「打開可執行文件」。在「打開可執行文件」對話框中,導航到包含notepad.exe的文件夾(例如,C:\windows\system32)。輸入notepad.exe做爲「文件名」。單擊「打開」。函數
三、在windbg窗口底部附近的命令行中,輸入如下命令:.sympath srv*.工具
輸出:spa
符號搜索路徑告訴windbg在哪裏查找符號(pdb)文件。調試器須要符號文件來獲取有關代碼模塊(函數名、變量名等)的信息。
輸入此命令,通知windbg執行符號文件的初始查找和加載:.reload命令行
四、查看notepad.exe模塊的符號線程
請輸入如下命令:x notepad!*debug
注意:若是看不到任何輸出,請輸入.reload。要查看包含main的notepad.exe模塊中的符號,請輸入如下命令: x notepad!*main*調試
五、在記事本上設置斷點notepad!WinMain,輸入如下命令:bu notepad!WinMaincode
要驗證是否設置了斷點,請輸入如下命令:bl
六、運行,請輸入如下命令:g
記事本一直運行到winmain函數,而後中斷到調試器。
要查看在記事本進程中加載的代碼模塊列表,請輸入如下命令:lm
要查看堆棧跟蹤,請輸入如下命令:k
七、再次運行 g
八、要中斷記事本執行,請從「調試」菜單中選擇「中斷」。
九、觀察保存過程,要在zwwritefile處設置和驗證斷點,請輸入如下命令:
十、輸入g從新開始運行記事本。在記事本窗口中,輸入一些文本,而後從「文件」菜單中選擇「保存」。當涉及zwCreateFile時,正在運行的代碼將中斷。輸入k以查看堆棧跟蹤。
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中。
一、打開Windbg
二、在「文件」菜單上,選擇「打開可執行文件」。在「打開可執行文件」對話框中,導航到c:\myapp\x64\debug。輸入myapp.exe做爲「文件名」。單擊「打開」。
三、輸入下面的命令:
.sympath+ C:\MyApp\x64\Debug
如今,windbg知道在哪裏能夠找到應用程序的符號和源代碼。
四、輸入下面的命令:
五、在「調試」菜單上,選擇「單步執行」(或按F11)。繼續單步執行,直到進入MyFunction。當您單步執行y=x/p2行時,應用程序將崩潰並進入調試器。輸出與此相似: