一个优秀的MinGW程序崩溃事后收集工具
#include <windows.h>
#include <stdio.h>
#include <DbgHelp.h>
#pragma comment(lib,"DbgHelp")
static LONG __stdcall ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
// 创建Dump文件
WCHAR wFilePath[4096]={0};
GetModuleFileNameW(NULL,wFilePath, 4096);
lstrcatW(wFilePath, L".dump");
HANDLE hDumpFile = CreateFileW(wFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDumpFile != INVALID_HANDLE_VALUE) {
// Dump信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
// 写入Dump文件
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(hDumpFile);
}
// 返回异常代码
return EXCEPTION_EXECUTE_HANDLER;
}
int main()
{
// 设置异常处理函数
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
printf("Hello World!\n");
getchar();
int *p = NULL;
p[1] = 123;
return 0;
}
项目地址:jrfonseca/drmingw: Postmortem debugging tools for MinGW.
