#include <Windows.h>
#include <iostream>
#include "dbghelp.h"
LONG WINAPI ProcessExceptionTest(struct _EXCEPTION_POINTERS* pExceptionInfo)
{
//
//构造dump生成目录
char szDumpPath[_MAX_PATH];
GetCurrentDirectory(_MAX_PATH, szDumpPath);
strcat(szDumpPath,"/Test.dmp");
//
//创建文件句柄
HANDLE hFile = CreateFile(szDumpPath,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
//
//创建异常信息结构体
_MINIDUMP_EXCEPTION_INFORMATION ExInfo;
ExInfo.ThreadId = GetCurrentThreadId();
ExInfo.ExceptionPointers = pExceptionInfo;
ExInfo.ClientPointers = NULL;
//
//调用MiniDumpWriteDump输出dump文件
MiniDumpWriteDump(GetCurrentProcess(), //请问MiniDumpWriteDump为何调用失败了?
GetCurrentProcessId(),
hFile,
/* MiniDumpNormal |*/ /*MiniDumpWithDataSegs | */MiniDumpWithFullMemory,
&ExInfo,
NULL,
NULL );
//
CloseHandle(hFile);
return EXCEPTION_EXECUTE_HANDLER;
}
int _tmain(int argc, _TCHAR* argv[])
{
SetUnhandledExceptionFilter(ProcessExceptionTest);//设置自己定义的异常调用函数
char* p = 0;//建立一个空指针并对其进行操作让它报错
p[0] = 0;
return 0;
}