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
在指定的輸出目錄下生成以下目錄
參數說明:
適合的場景:程序已經運行,但不知道何時會崩潰且不會有錯誤提示框的狀況。
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——MiniDumpWriteDump和SetHandleExceptionFilter。在咱們本身的應用裏使用這兩個API來實現程序崩潰時自動產生dump文件,而且還能夠實現本身的dump上傳機制等,不過要注意若是某些庫會致使咱們程序的機制失效。
5、Process Explorer
這個也是要注意在64位機上抓32位進程的問題,跟任務管理同樣處理
寫在最後:固然還有更多的工具和方法,包括上面介紹的工具和方法,咱們能夠根據實際狀況和須要靈活應用,抓取dmp文件來幫助咱們調試定位問題