程序崩潰的兩種主要現象:
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能夠得到的最多的信息。是一種折中方案。