C++生成dump调试文件

C++语言中调用window API函数CreateFile()和MiniDumpWriteDump(),记录程序崩溃时的Dump信息,并保持dump文件,根据dump文件对应的源码工程和.pdb文件,快速的定位到程序崩溃的源码位置

#include "DbgHelp.h"

LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
    QString strDumpFolder = QApplication::applicationDirPath() + "\\dump";
    QDir dir(strDumpFolder);
    if (!dir.exists())
    {
        dir.mkpath(strDumpFolder);
    }
    QString strPath = strDumpFolder + "\\" + QDateTime::currentDateTime().toString("yyyyMMddHHmmss") + ".dmp";
    HANDLE hDumpFile = CreateFile((LPCWSTR)strPath.utf16(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hDumpFile != INVALID_HANDLE_VALUE)
    {
        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;
}


main()调用方法:
// 注冊异常捕获函数
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值