抓取Dump文件的方法和工具介紹

1、Windows系統的任務管理器裏抓dump編程

啓動任務管理器,選中某個進程,右鍵,彈出菜單"建立轉儲文件"工具

注意事項:性能

當你在64位Windows系統上抓32位進程的dmup文件時,若是用的是64位任務管理器,那麼在用Windbg加載後,要用!wow64exts.sw切換到X86模式下,若是不想作這步切換,就要用32位的任務管理器來生成dmp文件。32位任務管理器在C:\Windows\SysWOW64\Taskmgr.exe測試

 適合的場景:在任務管理器裏還能看到進程,當程序出現業務問題、性能問題、失去響應;當程序崩潰跳出系統錯誤提示框的時候,特別適合應用在客戶機出現上述問題時使用。由於咱們不用傳其餘工具到客戶機上spa

2、用Windbg來抓取命令行

2.一、方法一:啓動windbg ,附加到咱們關心的進程,執行命令 .dump [/ma/mdi] [存放路徑]3d

適合的場景:在任務管理器裏還能看到進程,當程序出現業務問題、性能問題、失去響應;當程序崩潰跳出系統錯誤提示框的時候,適合在公司內部測試時開發人員和測試人員使用調試

2.二、方法二  監視特定進程,當某進程崩潰時自動抓取dumpcode

先運行可能存在問題的程序,而後執行命令在命令行裏 執行 ..\WinDbg\adplus.vbs(exe) -crash -pn qq.exe -o c:\1.dmp。運行此命令後,WinDbg會跳出黑色窗口,用於監控進程的運行情況,注意不要關閉這個窗口,不然Dump就抓不到了。在目標進程裏執行業務操做,當崩潰後,Dump文件會保存在指定的輸出路徑裏。
blog

在指定的輸出目錄下生成以下目錄

參數說明:

  • -crash: 當程序掛掉的一剎那抓取Dump,這個參數只能抓到程序報錯時的信息,若是程序不報錯,則沒法抓到Dump。
  • -hang: 當開啓WinDbg以後就開始抓取Dump,主要用於抓取程序異常,但程序未崩潰的狀況,例如進程的CPU使用率100%。
  • -pn:進程的PID或進程名,若是是進程名,會區分大小寫。
  • -o: Dump輸出路徑.

適合的場景:程序已經運行但不知道何時會崩潰且不會有錯誤提示框的狀況。

2.三、方法三 將Windbg設置爲默認調試工具

首先,執行 在命令行Windbg.exe -I 設置爲默認調試工具,會彈出Windbg窗口

 

點「肯定」窗口消失,而後運行程序和操做,當程序崩潰時WibDbg窗口再次彈出來,在windbg 命令行執行命令.dump [/ma/mdi] [存放路徑]

參數說明:

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

適合的場景:不知道何時會崩潰。無需指定要抓取的進程或PID,也不要求設置環境時必須存在進程,只要任意程序崩潰後均可以抓到Dump。

3、修改註冊表

@echo off  
echo 正在啓用Dump...  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\CrashDump" /f  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f  
echo Dump已經啓用  
pause  
@echo on 

將上述內存保存爲*.bat,而後執行,就開始了自動抓dmp文件的功能,只要有程序崩潰,就會在指定的目錄下生成。

鍵值說明:

名稱:DumpCount,類型:REG_DWORD,最大保留Dump個數,默認爲10.
名稱:DumpType,類型:REG_DWORD,Dump類型(1-Mini dump, 2-Full dump),默認爲1.
名稱:DumpFolder,類型:REG_EXPAND_SZ,Dump文件保存的位置。

當不須要自動抓取時,能夠將下面的內容

@echo off  
echo 正在關閉Dump...  
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /f  
echo Dump已經關閉  
pause  
@echo on 

保存爲bat執行,就不會在自動產生了

適合的場景:也是不知道何時程序會崩潰,也沒法肯定崩潰是否會重現,只要有崩潰就會被抓取,萬無一失。

4、編程

直接使用Windows的API——MiniDumpWriteDumpSetHandleExceptionFilter。在咱們本身的應用裏使用這兩個API來實現程序崩潰時自動產生dump文件,而且還能夠實現本身的dump上傳機制等,不過要注意若是某些庫會致使咱們程序的機制失效。

5、Process Explorer

 這個也是要注意在64位機上抓32位進程的問題,跟任務管理同樣處理

 

寫在最後:固然還有更多的工具和方法,包括上面介紹的工具和方法,咱們能夠根據實際狀況和須要靈活應用,抓取dmp文件來幫助咱們調試定位問題

相關文章
相關標籤/搜索