WinDbg抓取程序報錯dump文件的方法


程序崩潰的兩種主要現象:

a. 程序在運行中的時候,突然彈出錯誤窗口,然后點錯誤窗口的確定時,程序直接關閉

例如: “應用程序錯誤” “C++錯誤之類的窗口” “程序無響應” “假死”等

此種崩潰特點:程序已異常,在你未點出錯窗口的確定或其他按,所有錯誤信息都還保留在PC的內存中,可以直接抓取Dump文件。當然,如果你知道

怎么樣操作可以讓程序崩潰,也可以用守株待兔的抓取方法抓Dump文件。

b.程序在運行中的時候,窗口和進程突然消失,沒有任何錯誤窗體

典型的現象:程序自動關閉 或者玩游戲時,游戲界面自動消息等。

此種崩潰的特點:程序是自動崩潰的,當程序崩潰后,所有錯誤信息就都消息了,如果你要抓取這種崩潰的Dump,就必須先設置好抓取環境,否則是無

法抓取Dump文件的。

 

以上是兩種最常見的程序崩潰現象,下面分享利用Windbug工具抓取dump文件的方法。

a. 抓取方法一

此方法特點:

1. 必須指定要抓取的進程或PID,同時程序必須已經在運行,否則無法抓dump.

2.必須在出現問題之前,先布置好抓取環境。

3.正常關閉進程也會出現DUMP文件,因此需要確定抓到的Dump是在程序崩潰時生成的。

 

step1: 下載需要使用的工具

windbg: 此工具是抓取dump的主角。

step2: 設置Windbg抓取環境

先運行可能存在問題的程序,例如:IE,如果不先運行程序,則無法抓Dump。

然后將下載的Windbg解壓到任意盤符,例如C盤,使用下面的參數抓取Dump。

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

運行此命令后,WinDbg會跳出黑色窗口,用於監控進程的運行狀況,注意不要關閉這個窗口,否則Dump就抓不到了。

WinDbg參數說明:

-crash: 當程序掛掉的一剎那抓取Dump,這個參數只能抓到程序報錯時的信息,如果程序不報錯,則無法抓到Dump。

-hang: 當開啟WinDbg之后就開始抓取Dump,主要用於抓取程序異常,但程序未崩潰的情況,例如進程的CPU使用率100%。

-pn:進程的PID或進程名,如果是進程名,會區分大小寫。

-o: Dump輸出路徑.

step3:收集Dump文件

當程序崩潰后,Dump文件會保存在指定的輸出路徑內,例子中的Dump保存路徑是D盤,然后打包Dump文件,提交給軟件官方。

 

b.抓取方法二

此方法特點:

1. 無需指定要抓取的進程或PID,也不要求設置環境時必須存在進程,只要任意程序崩潰后都可以抓到Dump。

2. 必須在出現問題之前,先布置好抓取環境。

3.程序正常關閉時,比如點X時,不會生成Dump,只有程序崩潰時才會生成。

step1:下載需要使用的工具

step2:設置WinDbg抓取環境

將下載的工具解壓到任意盤符,比如C盤,使用下面的參數抓取Dump:

C:\WinDbg\Windbg.exe -I

運行此參數時,Windbg會彈出一個提示,點確定后Windbg界面會消失,此時代表環境已經設置好,現在就需要你想方設法讓程序崩潰,比如IE崩潰。

WinDbg參數說明:

-I: 將WinDbg作為默認的調試工具,注意I必須為大寫,小寫無效。

Step3:收集Dump文件

在程序崩潰時,WibDbg窗口再次彈出來時,使用以下命令保存Dump文件。

.dump -ma d:\test.dmp

當開始保存Dump文件時,左下角的狀態信息會變成*Busy*,表示WinDbg正在工作,Dump保存完成后會出現"Dump successfully written"這個提示,接

下來就等Dump保存好,然后把Dump文件打包提交軟件官方。

 

c.抓取方法三

此方法特點:

可以在程序報錯后,直接抓取Dump文件,不需要額外設置,適用於突然發現報錯,且不確定能否復現問題時抓取Dump,這是一個非常重要的抓取方法,

強烈建議大家記住。

step1:下載需要使用的工具

ProcessExplorer:此工具用於定位報錯窗口的進程ID

step2:使用ProcessExplorer定位報錯窗口的進程PID

step3:運行WinDbg,抓取Dump文件

運行Windbg后,依次點”File" --> "Attack to a Process" ,在彈出的界面中,找到剛才捕捉到的PID,然后點OK.

點OK完成后,你就會看到可以抓取的Dump界面了,再用dump保存參數保存dump即可。

.dump -ma d:\test.dmp

WinDbg參數說明:

-m: 卻省選項,生成標准的minidump,轉儲文件通常較小,便於在網絡上通過郵件或其它方式傳輸。這種文件的信息量較少,只包含系統信息、加載的模塊DLL信息,

進程信息和線程信息。

-ma:帶有盡量多選項的minidump(包括完整的內存內容、句柄、未加載的模塊等等),文件較大,但如果條件允許(本機調試,局域網環境),推薦用這個。

-mFhutwd: 帶有數據段,非共享的讀、寫內存頁和其他有用的信息的minidump,包含了通過minidump能夠得到的最多的信息。是一種折中方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM