前言:在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)打開注冊表
三、Windbg下載地址
四、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設置的目的是下載該程序用到的操作系統相關的庫函數的符號表到本地