轉儲檔案也就是我們常說的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...