Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀。dump文件是进程在内存中的镜像文件,通过转换然后存储成以.DMP后缀的文件。dump文件根据存储时的选项不同,会生成不同大小的文件,其中记录信息也自然有所不同。
程序分两种,内核模式程序和用户模式程序,也即Ring0程序和Ring3程序。Dump文件是伴随着程序而生成的,所以Dump文件也同样分两种。
1. Kernel-Mode Dump Files(内核模式Dump文件),主要是驱动程序,此文不涉及。
2. User-Mode Dump Files(用户模式Dump文件),主要是应用程序及服务程序,此文所讲。
用户模式Dump文件又分Full User-Mode Dumps和Minidumps。前者生成的是完整的内存快照,所以文件比较大。后者依然生成选项,生成包含不同信息的Dump文件。此文以Minidumps文件来分析调试。
.dump /m C:\myapp.dmp
命令,即可生成默认的miniDump文件(只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息)。#include <DbgHelp.h>
#pragma comment(lib, "Dbghelp.lib")
// 此函数需要包含上面头文件和引入相应的库
LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* _pExcp)
{
HANDLE hFile = CreateFile(
"d:\\Format.dmp",
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return EXCEPTION_CONTINUE_EXECUTION;
}
MINIDUMP_EXCEPTION_INFORMATION einfo = {0};
einfo.ThreadId = ::GetCurrentThreadId();
einfo.ExceptionPointers = _pExcp;
einfo.ClientPointers = FALSE;
MiniDumpWriteDump(GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
MiniDumpNormal, // 指定生成默认的Minidump文件
&einfo,
NULL,
NULL);
CloseHandle(hFile);
return EXCEPTION_EXECUTE_HANDLER;
}
// 下面函数放在当前模块的入口函数处,指定ExceptionFilter替换原生的异常处理
// 即当原本要弹出崩溃提示窗口前,需要经过此函数处理,可以处理完立即退出,也可以继续
SetUnhandledExceptionFilter(ExceptionFilter);
Dump文件
Set symbol paths
设置符号文件路径,也即PDB文件路径。然后点击Debug with Native Only
,代码即会暂时在出错的地方,通过Call Stack窗口查看相关信息。srv*D:\Symbols*http://msdl.microsoft.com/download/symbols
!analyze -v
,等待WinDbg分析完毕。ExceptionFilter
函数,即可以重新定义崩溃窗口,用以提示用户发送相关信息给软件提供商。 SetCustomUnhandledExceptionFilter
在Solution的启动Project的最开始调用一次即可。 原文:http://www.cnblogs.com/feihe0755/p/7193709.html