使用windb抓去dump文件

第一種崩潰:程序在運行中的時候,忽然彈出錯誤窗口,而後點錯誤窗口的肯定時,程序直接關閉。
  例如「應用程序錯誤」,「C++錯誤之類的窗口」,「程序無響應」,「假死」等,下圖就是一個IE應用程序錯誤的示例圖片:

這種崩潰現象的特色是:
  程序已經異常,在你未點擊出錯窗口的肯定或其餘按鈕時,全部錯誤信息都還保留在PC的內存中,能夠直接抓取Dump文件。固然,若是你知道怎樣操做可讓程序崩潰,也能夠用守株待兔的抓取方法去抓Dump問文件。
推薦使用抓取方法三,由於這個抓取方法能夠在你看到錯誤時就第一時間抓取到Dump,只要出現問題時,叫人保留這個出錯窗口,而後你去抓就好了。固然若是你未能及時抓取到這個Dump的話,也能夠用其餘方法。

第二種崩潰:程序在運行中的時候,窗口或進程忽然消失,沒有任何錯誤窗體。
  典型的現象就是IE自動關閉,好比你連續打開幾個IE窗口,關閉其中任意一個窗口時,全部IE窗口都消失了。或者玩着玩着遊戲,遊戲界面自動消失等。
這種崩潰現象的特色是:
  程序是自動崩潰的,當程序崩潰後,全部錯誤信息就都消失了,若是你要抓取這種崩潰的Dump,就必須先設置好抓取環境,不然是沒法抓取到Dump文件的,所以,這種現象用方法一,方法二,方法四均可以,由於方法三是要有報錯界面才抓的了,因此方法三不適用於這種現象。

  這就是目前最多見的兩種程序崩潰現象,接下來和你們分享下程序Dump的方法。

抓取方法一:
該方法特色:
  一、必須指定要抓取的進程或PID,同時程序必須已經在運行,不然沒法抓Dump。
  二、必須在出現問題以前,先佈置好抓取環境。
  三、正常關閉進程也會出現Dump文件,所以須要肯定抓到的Dump是在程序崩潰時生成的。
第一步:下載須要使用的工具:
WinDbg:該工具是抓取Dump的主角。
工具下載1:http://115.com/file/an94sp48
工具下載2:6.12.0002.633 x86:<a href=" data-ke-src=">6.12.0002.633 x86:&lt;a href="http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi" target="_blank" rel="external">http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi</a><br/>6.12.0002.633 amd64:<a href="http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi" target="_blank" rel="external">http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi</a>

第二步:設置WinDbg抓取環境。
先運行可能存在問題的程序,例如IE,若是不先運行程序,則沒法抓Dump。
而後將本站提供的WinDbg解壓到任意盤符,例如C盤,使用下面的參數抓取Dump。
  網絡

C:\WinDbg\adplus.vbs -crash -pn iexplore.exe -o d:


運行該命令後,WinDbg會跳出黑色窗口,用於監控進程的運行情況,注意不要關閉這個窗口噢,不然Dump就抓不到了。
WinDbg參數說明:
-crash:當程序掛掉的一剎那抓取Dump,這個參數只能抓到程序報錯時的信息,若是程序不報錯,則沒法抓到Dump。
-hang:當開啓WinDbg以後就開始抓取Dump,主要用於抓取程序中止響應,但程序未崩潰的狀況,例如進程的CPU使用率100%。
詳見微軟知識庫:http://support.microsoft.com/kb/286350/ZH-cn
(若是你搞不明白-crash和-hang的差異,那麼推薦使用-crash參數。)
-pn:進程的PID或進程名,若是是進程名,會區分大小寫。
-o:Dump輸出路徑。

第三步:收集Dump文件。
當程序崩潰後,Dump文件會保存在指定的輸出路徑內,例子中的Dump保存路徑就是D盤了,而後打包Dump文件,提交給軟件官方,供官方分析便可。

抓取方法二:
該方法特色:
  一、無需指定要抓取的進程或PID,也不要求設置環境時必須存在進程,只要任意程序崩潰後均可以抓到Dump。
  二、必須在出現問題以前,先佈置好抓取環境。
  三、程序正常關閉時,好比點x時,不會生成Dump,只有程序崩潰時纔會生成。
第一步:下載須要使用的工具:
WinDbg:該工具是抓取Dump的主角。
工具下載1:http://115.com/file/an94sp48
工具下載2:6.12.0002.633 x86:<a href=" data-ke-src=">6.12.0002.633 x86:&lt;a href="http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi" target="_blank" rel="external">http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi</a><br/>6.12.0002.633 amd64:<a href="http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi" target="_blank" rel="external">http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi</a>

第二步:設置WinDbg抓取環境。
將本站提供的WinDbg解壓到任意盤符,例如C盤,使用下面的參數抓取Dump。
  工具

C:\WinDbg\Windbg.exe -I



運行該參數時,WinDbg會彈出一個提示,點擊肯定後WinDbg界面會消失,以下圖:
此時就表明環境已經設置好,如今就須要你千方百計讓程序崩潰,好比讓IE崩潰。

WinDbg參數說明:
-I:將WinDbg做爲默認的調試工具,注意I必須爲大寫,小寫無效。

第三步:收集Dump文件。
在程序崩潰時,WinDbg窗口再次彈出來時,使用如下命令保存Dump文件。
  spa

.dump -ma d:\test.dmp


以下圖:

當開始保存Dump文件時,左下角的狀態信息會變成*Busy*,表示WinDbg正在工做,Dump保存完成後會出現「Dump successfully written」這個提示,以下圖:

接下來就是等Dump保存好,而後把dump文件打包提供給軟件官方便可。

抓取方法三:
該方法特色:
  一、能夠在程序報錯後,直接抓取Dump文件,不須要額外設置,適用於忽然發現報錯,且不肯定可否復現問題時抓取Dump,這是一個很是重要的抓取方法,強烈建議你們記住。
第一步:下載須要使用的工具:
ProcessExplorer:該工具是用於定位報錯窗口的進程PID。
工具可在本站下載! 操作系統

WinDbg:該工具是抓取Dump的主角。
工具下載1:http://115.com/file/an94sp48
工具下載2:6.12.0002.633 x86:<a href=" data-ke-src=">6.12.0002.633 x86:&lt;a href="http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi" target="_blank" rel="external">http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi</a><br/>6.12.0002.633 amd64:<a href="http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi" target="_blank" rel="external">http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi</a>

第二步:使用ProcessExplorer報錯窗口所屬的進程PID(什麼是PID請見文章尾部)
先運行ProcessExplorer,而後鼠標左鍵按住界面上的瞄準鏡圖標,而後拖動到報錯的窗口上鬆開鼠標,如圖:

此時,ProcessExplorer會自動定位到出錯的進程上面,而後記住出錯進程的PID,例以下圖中QQ.exe的PID就是2960。


第三步:運行WinDbg,抓取Dump文件。
運行WinDbg後,依次點擊「File」=》「Attach to a Process」,以下圖:


在彈出的界面中,找到剛纔捕捉到的PID,而後點OK。


點完OK後,你就會看到能夠抓取Dump的界面啦,再用dump保存參數保存Dump便可。
  .net

.dump -ma d:\test.dmp


WinDbg參數說明:
-m:缺省選項,生成標準的minidump, 轉儲文件一般較小,便於在網絡上經過郵件或其餘方式傳輸。 這種文件的信息量較少,只包含系統信息、加載的模塊(DLL)信息、 進程信息和線程信息。
-ma:帶有儘可能多選項的minidump(包括完整的內存內容、句柄、未加載的模塊,等等),文件很大,但若是條件容許(本機調試,局域網環境), 推薦使用這中dump。
-mFhutwd:帶有數據段、非共享的讀/寫內存頁和其餘有用的信息的minidump。包含了經過minidump可以獲得的最多的信息。是一種折中方案。

抓取方法四:
該方法特色:
  一、使用系統自帶的華生醫生來抓取Dump,簡單,可是有時會不靈光,部署的性質有點相似方法二。
第一步:下載須要使用的工具:
雖然華生醫生是系統自帶的工具,可是基本大部分操做系統都把這個工具給精簡掉了,你們能夠下載附件中的綠色版,解壓後直接運行便可,運行後會把一切都設置好。
點擊下載華生醫生綠色版(484.87 KB)
[2012-02-12 02:27 AM; 已下載次數:170]


第二步:坐收Dump文件。
  當你運行過本站提供的drwtsn32(華生調試器).exe後,遇到程序崩潰時,會自動生成Dump文件到C:根目錄,文件名爲drwtsn32.log和user.dmp,把這2個文件打包提交給官方分析便可。

  至此,WinDbg很是經常使用的抓程序崩潰Dump的方法基本已經全了,但願你們之後再碰到程序崩潰時,再也不是隻提供錯誤截圖,而是能夠提供Dump供分析!
  另外,網維大師用戶若是遇到IE崩潰問題,可採用以上Dump抓取方法,直接提供Dump文件給在線客服,這樣可提升解決問題的效率,快速幫你們解決問題!

最後一個小知識點:什麼是進程PID?
  PID就是各進程的身份標識,程序一運行系統就會自動分配給進程一個獨一無二的PID。進程停止後PID被系統回收,可能會被繼續分配給新運行的程序。
  PID一列表明瞭各進程的進程ID,也就是說,PID就是各進程的身份標識。
  只要沒有成功運行其餘程序,這個pid會繼續分配給當前要運行的程序,若是成功運行一個程序,而後再運行別的程序時,系統會自動分配另外一個pid。
要查看PID的話就打開任務管理器--查看-- 選擇列--PID,就能夠看到了。 線程

相關文章
相關標籤/搜索