一个优秀的MinGW程序崩溃事后收集工具

xingyun86 3小时前 3

一个优秀的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.

×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回