正确的保存32位dump

windows进程分为32位版本和64位版本。保存32位dump有如下几种方式

通过任务管理器

通过任务管理器–>”创建转储文件” 。
保存方式为fulldump,方法比较简单。 缺点是如果在64位系统下保存32位进程则会变为64位dump,那么windbg打开时默认是64位dump,需要进行切换;
同时某些系统命令无法解析,还有可能解析显示不正确。
所以,不推荐这个方法。

通过ntsd进行命令行保存

ntsd在windows xp系统之后就不再是windows自带程序了,需要额外下载。将32位的ntsd.exe 放置在系统目录下,然后通过命令

ntsd -pv -p PID -c “.dump /f d:\aaa.dmp ;q ” (不关闭原始进程) ntsd -pPID -c “.dump /f d:\aaa.dmp ;q ” (关闭原始进程)
这个方法的好处是,在64位系统下正确保存了32位dump,windbg的任何命令和分析都是正确的。

api自动保存dump

通过 SetUnhandledExceptionFilter 函数实现自定义异常捕获函数,但出现异常时,自动保存dump。
保存minidump :

 (void)MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL);

保存fulldump:

(void)MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, (MINIDUMP_TYPE)0x9b67, &ExInfo, NULL, NULL);

关于如何通过程序自动保存dump后续讲解

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容