WinDbg分析DMP文件方法完全攻略
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
前言:在C++實際開發過程中,開發出來的程序,一般情況下由開發人員進行單元測試,然后移交給測試人員進行測試。在開發人員測試出現的bug,我們可以直接在本地進行調試。如果測試人員測試出崩潰級別的bug,如果我們需要調試往往借助于vs提供的Remote Debugger工具進行遠程調試(關于vs2010遠程調試的方法,請參考http://blog.sina.com.cn/s/blog_a459dcf5010153o7.html),然是當程序在用戶手中出現崩潰此時我們可以采用Remote Debugger進行調試,但是如果此時開發人員無法直接去用戶現場調試,此時就需要用戶生成DMP文件,以便開發人員使用DMP文件進行分析。
本文主要介紹C++開發過程中出現程序崩潰后,如何進行分析定位bug(基于xp系統)。
一、DMP文件獲取設置
(1)在運行窗口中輸入 drwtsn32 -i ,并且點擊確定
(2)在(1)確定后彈出如下對話框

(3)在(2)彈出的確定框后點擊確定按鈕完成,將Dr.Watson設置為默認應用程序調試程序。 Dr.Watson系統自帶的程序。 (4)再次在運行窗口中輸入:drwtsn32,如下圖:
(5)點擊確定按鈕,在彈出的對話框中按照下列方式設置
(6) 點擊確定按鈕完成DMP文件設置。
二、關閉Dr.Watson方法 (1)打開注冊表 (2)在注冊表中進入主鍵[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug],然后將“AUTO”鍵值設置為0如下圖:
三、Windbg下載地址 http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx,下載完成后安裝 四、DMP文件獲取 (1) 用vs2010創建一個基于win32的程序,其源碼如下:
(2)我們知道在學習C++中整數不能跟0進行除運算,否則會引起程序崩潰。而(1)中就是編寫能觸發0的異常,導致程序結束運行的程序。編譯(1)中的程序,結果如下:
(3)運行(2)中test.exe程序 ,程序崩潰。如下圖:
(4) 按照《一、DMP文件獲取設置》步驟實現Dr.Watson設置為默認應用程序調試程序。 (5)再次運行運行(2)中test.exe程序 如下圖:
點擊確定完成dmp文件的生成。 (6)打開在(4)中設置dmp文件路徑。(本例中默認地址為:C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson)如下圖:
其中user.dmp就是我們需要的dmp文件。 五、分析《四、DMP文件獲取》中獲取的DMP文件 (1)符號表路徑設置(參考下圖)
(2)在彈出對話框中輸入: D:\testdmp;srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols 點擊ok按鈕
注意:D:\testdmp; 這個是我們存放符號的文件夾,在進行此步驟前創建。 其中;srv*d:/symbolslocal*http://msdl.microsoft.com/download/symbols設置的目的是下載該程序用到的操作系統相關的庫函數的符號表到本地 (3) 將前面《四、DMP文件獲取》中程序生成的符號test.pdb(下圖)拷貝到D:\testdmp中
拷貝后結果如下
(4) 源代碼路徑設置(參考下圖)
(5)在彈出對話框中輸入:D:\Personal\My Documents\Visual Studio 2010\Projects\test 點擊ok按鈕
(6)DMP文件導入(參考下圖)

點擊打開,完成dmp導入。導入后自動定位錯誤的行,并在command中給出崩潰的原因,如下如:
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
(3)在(2)彈出的確定框后點擊確定按鈕完成,將Dr.Watson設置為默認應用程序調試程序。 Dr.Watson系統自帶的程序。 (4)再次在運行窗口中輸入:drwtsn32,如下圖:
(5)點擊確定按鈕,在彈出的對話框中按照下列方式設置
(6) 點擊確定按鈕完成DMP文件設置。
二、關閉Dr.Watson方法 (1)打開注冊表 (2)在注冊表中進入主鍵[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug],然后將“AUTO”鍵值設置為0如下圖:
三、Windbg下載地址 http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx,下載完成后安裝 四、DMP文件獲取 (1) 用vs2010創建一個基于win32的程序,其源碼如下:
(2)我們知道在學習C++中整數不能跟0進行除運算,否則會引起程序崩潰。而(1)中就是編寫能觸發0的異常,導致程序結束運行的程序。編譯(1)中的程序,結果如下:
(3)運行(2)中test.exe程序 ,程序崩潰。如下圖:
(4) 按照《一、DMP文件獲取設置》步驟實現Dr.Watson設置為默認應用程序調試程序。 (5)再次運行運行(2)中test.exe程序 如下圖:
點擊確定完成dmp文件的生成。 (6)打開在(4)中設置dmp文件路徑。(本例中默認地址為:C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson)如下圖:
其中user.dmp就是我們需要的dmp文件。 五、分析《四、DMP文件獲取》中獲取的DMP文件 (1)符號表路徑設置(參考下圖)
(2)在彈出對話框中輸入: D:\testdmp;srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols 點擊ok按鈕
注意:D:\testdmp; 這個是我們存放符號的文件夾,在進行此步驟前創建。 其中;srv*d:/symbolslocal*http://msdl.microsoft.com/download/symbols設置的目的是下載該程序用到的操作系統相關的庫函數的符號表到本地 (3) 將前面《四、DMP文件獲取》中程序生成的符號test.pdb(下圖)拷貝到D:\testdmp中
拷貝后結果如下
(4) 源代碼路徑設置(參考下圖)
(6)DMP文件導入(參考下圖)
點擊打開,完成dmp導入。導入后自動定位錯誤的行,并在command中給出崩潰的原因,如下如:
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成