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 ” (关闭原始进程)
这个方法的好处是,在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后续讲解
网友评论