如何生成轉儲 dmp 檔案 工具篇

2022-01-29 03:00:47 字數 3415 閱讀 7219

轉儲檔案也就是我們常說的dump檔案。可以把轉儲檔案看成軟體的某個時刻的乙個快照。轉儲檔案一般都是在軟體出現問題時手動生成或者程式自動生成。下面我們介紹幾種借助第三方工具生成轉儲檔案的方法。

任務管理器可以說是最易獲取的系統工具,同時它具有生成轉儲檔案的功能。但要注意的是在64位作業系統上面,預設啟動的是64位的任務管理器。使用任務管理器生成轉儲檔案需要遵循乙個原則:用32位任務管理器給32位程序(無論該程序是執行在32位還是64位系統上面)生成轉儲檔案,用64位任務管理器給64位程序生成轉儲檔案。在64位系統上,32位的任務管理器位於c:\windows\syswow64\taskmgr.exe

生成方法:右鍵程序 --> 建立轉儲檔案-->彈出對話方塊提示生成成功,以及dmp檔案位置。

類似的工具還有:process explorer,pchunter等。

可以通過在登錄檔中進行配置,讓作業系統在程式崩潰時自動生成dmp檔案,並放到指定位置。

在登錄檔項hkey_local_machine\software\microsoft\windows\windows error reporting\localdumps下面根據程序名(含.exe)新建子項,並配置如下值:

名稱:dumpcount,型別:reg_dword,最大保留dump個數,預設為10.

名稱:dumptype,型別:reg_dword,dump型別(1-mini dump, 2-full dump),預設為1.

名稱:dumpfolder,型別:reg_expand_sz,dump檔案儲存的位置。

windbg這麼強大的除錯工具當然是可以生成轉儲檔案的,何止生成轉儲檔案,它能做的更多。

生成方法:file-->attach to process-->輸入.dump /ma /u d:\test.dmp

提示成功之後,可以在d盤看到生成dmp檔案到test_0bf0_2017-08-13_23-46-37-244_11cc.dmp檔案。

0bf0_2017-08-13_23-46-37-244_11cc是/u引數附加上去的,意思是2023年08月13日 23時46分37秒244毫秒,程序pid位11cc。

.dump命令引數比較多,常用的組合就是/ma,/m表示生成minidump,/a表示dmp包含所有資訊,/u引數就是上面說的附加時間和pid資訊到檔名。

windbg -i可以將windbg設定為及時偵錯程式(開啟了uac的系統上面,需要以管理員許可權執行),也就是我們常說的jit偵錯程式。設定成功之後,如遇到程式崩潰,windbg會自動執行並附加到崩潰程序。

設定成功之後會彈出對話方塊。如果不想彈出對話方塊,可以加上s(slient首字母)windbg -is.

也可以通過修改登錄檔項aedebug來實現和windbg -i同樣的功能。

根據windbg位數(32/64)和系統的位數(32/64)的不同,修改的登錄檔項的位置也不同:

32位windbg--32位系統:hkey_local_machine\software\microsoft\windows nt\currentversion\aedebug

32位windbg--64位系統:hkey_local_machine\software\wow6432node\microsoft\windows nt\currentversion\aedebug

64位windbg--64位系統:hkey_local_machine\software\microsoft\windows nt\currentversion\aedebug

aedebug項下面有2個值:

名稱:auto,型別:reg_sz,0表示出現崩潰彈出對話方塊,讓使用者選擇關閉程式還是除錯程式;1表示自動彈出設定偵錯程式。

名稱:debugger,型別:reg_sz,偵錯程式值。預設為"c:\windows\system32\vsjitdebugger.exe" -p %ld -e %ld,設定為windbg需更改為"c:\debuggers\windbg\x86\windbg.exe" -p %ld -e %ld -g

看起來挺複雜,其實挺好理解的。

adplus工具位於windbg安裝目錄,最早叫adplus.vbs,以vbscript指令碼提供,最新版改成了adplus.exe。adplus.exe不僅可以在程式崩潰時手動執行來生成dmp檔案,也可以在崩潰之前就執行它,當程式崩潰時它會自動生成dmp檔案;甚至可以在程式沒有執行之前就先執行adplus,當程式崩潰時它會自動生成dmp檔案。

如:adplus -pn powerpnt.exe -pn wincmd32.exe -hang -o c:\test

adplus -o [options]
runmode:-hang或-crash

-hang附加到程序,生成dmp,然後解除附加(detach)。多用於程式卡死的情況下。

-crash附加到程序,直到程式崩潰或者其他事件發生,生成dmp檔案,然後解除附加。

-o 目錄

指定生成檔案儲存目錄。

-p 程序id

指定程序id,可以同時使用多次-p來指定多個程序。

-pn 程序名

指定程序名,支援萬用字元,也可以同時使用多次-pn來指定多個程序,但程序名必須存在,不存在則失敗。

-po 程序名

和-pn類似,但-po不要求程序名必須存在。可以在程序啟動之前就先啟動adplus.

-pmn 程序名

pmn為process monitor縮寫。顧名思義,可以監視程序列表,一旦指定程序執行,則附加上去。只適用於-crash模式。

qt creator 如何生成dmp檔案

一 說明 程式崩潰時產生dmp檔案 路徑 dmp 檔案中 名稱 為yyyy mm dd hh mm ss.bmp vs 可以開啟檢視內容 二 使用方法 1 pro檔案中增加 libs ldbghelp 2 main檔案中包含該標頭檔案 3 在main函式體內,註冊異常捕獲函式 ifdef q os ...

如何確保系統崩潰時能夠生成記憶體轉儲檔案?

為了成功得到系統自動生成的記憶體轉儲檔案,或者您需要選擇生成的轉儲檔案的型別,請務必確保系統中 啟動和故障恢復 的相關配置如下 1 寫入小記憶體轉儲,如下圖所示 2 寫入核心記憶體轉儲,如下圖所示 啟動和故障恢復 對話方塊可以通過以下方式開啟 1 單擊 開始 選單,在搜尋框內鍵入 sysdm.cpl...

Ubuntu的核心轉儲工具

ubuntu 官方連線 kdump是乙個linux核心崩潰轉儲機制,這個機制的原理是在記憶體中保留一塊區域,這塊區域用來存放capture kernel,當前的核心發生crash後,通過kexec把保留區域的capture kernel執行起來,由capture kernel負責把crash ker...