正確的保存32位dump

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)程) ntsd -pPID -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ù)講解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容