Windbg除錯軟體系統崩潰
一、Windbg簡介
WinDBG是一個非常強大的偵錯程式,它設計了極其豐富的功能來支援各種除錯任務,包括使用者態除錯,核心態除錯,除錯轉儲檔案,遠端除錯等。WinDBG具有非常大的靈活性和可擴充套件性,用來滿足各種各樣的除錯需求,比如使用者可以自由定義除錯事件的處理方式,編寫除錯擴充套件模組來定製和補充WinDBG的除錯功能。
儘管WinDBG是個典型的視窗程式,但是它的大多數除錯功能還是以手工輸入命令的方式來工作。WinDBG提供了20多條標準命令,140多條元命令,和大量擴充套件命令,學習和靈活使用這些命令是學習WinDBG的關鍵,也是難點。
二、WinDBG配置
1.配置WinDBG軟體標識路徑
(1)開啟WinDBG軟體,如下圖所示。
(2)點選File選單,選擇Symbol File Path選單項,在彈出的對話方塊中輸入WinDBG標識的路徑,如下圖所示。
(3)輸入以上符號路徑後,點選OK,設定完成。
2.配置WinDBG軟體搜尋程式碼路徑
(1)點選File選單,選擇Source Search Path選單項,在彈出的對話方塊中輸入要進行除錯系統的程式碼路徑(程式碼設定的路徑到解決方法一級),如下圖所示。
(3)輸入程式碼路徑後,點選OK,設定完成。
二、WinDBG除錯系統
1.系統崩潰識別
當發生系統崩潰時,不要急著關掉程式或關掉提示對話方塊,系統崩潰時的狀況如下圖所示。
2.開啟WinDBG與崩潰的系統進行連結
(1)開啟WinDBG軟體,並確認是否正確設定標識和程式碼搜尋路徑,點選File選單,選擇Attach to a Process選單項,如下圖所示。
(2)在彈出的對話方塊中選擇要除錯的系統程序,如下圖所示。
(3)此時WinDBG進入使用者態除錯,如下圖所示。
3.輸入命令進行除錯
(1)在Command視窗下輸入:~* kb並點選回車鍵,顯示所有的執行緒,如下圖所示。
(2) 顯示的所有執行緒中尋找Kernel32! UnhandledExceptionFilter資訊,如下圖所示。
(3) 根據以上資訊可以知道系統崩潰所在的執行緒是16
(4)在Command視窗中輸入:dd0358d890命令,顯示第一個引數的記憶體資訊,此時指向EXCEPTION_POINTERS結構,如下圖所示。
(5) 顯示EXCEPTION_POINTERS 結構記憶體資訊詳細,如下圖所示。
(6) 在Command視窗中輸入:.exr 0358d840命令,獲取有關異常的型別資訊,如下圖所示。
(7) 在Command視窗中輸入:.cxr 0358d898命令,獲取上下文的資訊,如下圖所示。
(8) 在Command視窗中輸入:kv命令,獲得實際的異常的呼叫堆疊,如下圖所示。
kv命令顯示異常呼叫堆疊資訊
0:016> kv
*** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
0358dbb0 026ff8ac 0358dc2c 00000001 00000008 MSVCR80!fwrite+0x39
0358ec34 02700d82 03460000 000027d8 03478f1c 123::ReadData+0x7c [123.cpp @ 176]
(9) 根據以上資訊可知,崩潰的檔案是123.cpp。崩潰的函式是fwrite。