1. 程式人生 > >Windbg除錯軟體系統崩潰

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

號執行緒,在WinDBG的執行緒視窗中,用滑鼠選中第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