qt creator 如何生成dmp文件

1、在.pro文件中添加
LIBS += -lDbgHelp

2、头文件内容

/*
 * 一 说明:
 *  程序崩溃时产生dmp文件
 *  路径: “../dmp/”文件中
 *  名称: 为yyyy_MM_dd_hh_mm_ss.bmp
 *  vs 可以打开查看内容
 * 二 使用方法:
 * 1、.pro文件中增加 LIBS += -lDbgHelp
 * 2、main文件中包含该头文件
 * 3、在main函数体内,注冊异常捕获函数
 *
   #ifdef Q_OS_WIN
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
   #endif
 *
 * */
#ifndef GEN_PDB_FILE
#define GEN_PDB_FILE

#include <windows.h>
#include <dbghelp.h>
#include <QDir>
#include <QDateTime>
#include <QDebug>

//异常捕获函数
long ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
    QString currPath = QDir::currentPath()+"/dmp/";
    {
        // 在程序exe的上级目录中创建dmp文件夹
        QDir *dmp = new QDir;
        bool exist = dmp->exists(currPath);
        if(exist == false)
            dmp->mkdir(currPath);
    }
    QDateTime current_date_time = QDateTime::currentDateTime();
    QString current_date = current_date_time.toString("yyyy_MM_dd_hh_mm_ss");
    QString time =  current_date + ".dmp";
    EXCEPTION_RECORD *record = pException->ExceptionRecord;

    QString errCode(QString::number(record->ExceptionCode, 16));
    QString errAddr(QString::number((uint)record->ExceptionAddress, 16));
    QString errFlag(QString::number(record->ExceptionFlags, 16));
    QString errPara(QString::number(record->NumberParameters, 16));

    qDebug()<<"errCode: "<<errCode;
    qDebug()<<"errAddr: "<<errAddr;
    qDebug()<<"errFlag: "<<errFlag;
    qDebug()<<"errPara: "<<errPara;


    HANDLE hDumpFile = CreateFile((LPCWSTR)QString(currPath + time).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;
        MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
        CloseHandle(hDumpFile);
    }
    else{
        qDebug()<<"hDumpFile == null";
    }
    return EXCEPTION_EXECUTE_HANDLER;
}

#endif // GEN_PDB_FILE

3、main文件中

#ifdef Q_OS_WIN
 SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
#endif

4、dmp文件如何使用

 

https://www.cnblogs.com/yangguang-it/p/6435297.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值