windows進(jìn)程分為32位版本和64位版本。保存32位dump有如下幾種方式
通過任務(wù)管理器
通過任務(wù)管理器–>”創(chuàng)建轉(zhuǎn)儲(chǔ)文件” 。
保存方式為fulldump,方法比較簡(jiǎn)單。 缺點(diǎn)是如果在64位系統(tǒng)下保存32位進(jìn)程則會(huì)變?yōu)?4位dump,那么windbg打開時(shí)默認(rèn)是64位dump,需要進(jìn)行切換;
同時(shí)某些系統(tǒng)命令無(wú)法解析,還有可能解析顯示不正確。
所以,不推薦這個(gè)方法。
通過ntsd進(jìn)行命令行保存
ntsd在windows xp系統(tǒng)之后就不再是windows自帶程序了,需要額外下載。將32位的ntsd.exe 放置在系統(tǒng)目錄下,然后通過命令
ntsd -pv -p PID -c “.dump /f d:\aaa.dmp ;q ” (關(guān)閉原始進(jìn)程)
這個(gè)方法的好處是,在64位系統(tǒng)下正確保存了32位dump,windbg的任何命令和分析都是正確的。
api自動(dòng)保存dump
通過 SetUnhandledExceptionFilter 函數(shù)實(shí)現(xiàn)自定義異常捕獲函數(shù),但出現(xiàn)異常時(shí),自動(dòng)保存dump。
保存minidump :
(void)MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL);
保存fulldump:
(void)MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, (MINIDUMP_TYPE)0x9b67, &ExInfo, NULL, NULL);
關(guān)于如何通過程序自動(dòng)保存dump后續(xù)講解