Qt gerar arquivos de despejo contra auxiliar na localização de assistência ao desenvolvimento (b)

Em primeiro lugar, a configuração do ambiente
Aqui Insert Picture Descrição
opção for selecionada a caixa vermelha reconstruir a versão de lançamento do projeto pode gerar arquivos pdb
Aqui Insert Picture Descrição
dois, código de produção arquivo de despejo

#ifndef QTDUMPGENERATE_H
#define QTDUMPGENERATE_H

#include <QObject>
#include <QDir>
#include <QDateTime>
#include <QDebug>
#include <QCoreApplication>

//注意下面2个头文件引入的顺序
#include <windows.h>
#include <dbghelp.h>

class QtDumpGenerate
{
public:
    QtDumpGenerate();
    void ApplicationCrashHandler(EXCEPTION_POINTERS *pException);
};

#endif // QTDUMPGENERATE_H

#include "qtdumpgenerate.h"

QtDumpGenerate::QtDumpGenerate()
{

}

void QtDumpGenerate::ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
    QDateTime current_date_time = QDateTime::currentDateTime();
    QString current_date = current_date_time.toString("yyyy_MM_dd_hh_mm_ss");
    QString dmpFileName = QCoreApplication::applicationDirPath() + "/" +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(dmpFileName).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";
    }
}

long ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
    QtDumpGenerate dmpGenerate;
    dmpGenerate.ApplicationCrashHandler(pException);
    return EXCEPTION_EXECUTE_HANDLER;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
    int *p = nullptr;//make crash point
    *p = 1;
    init();
    return a.exec();
}

Três, vs arquivos de despejo de depuração
Aqui Insert Picture Descrição
Aqui Insert Picture Descrição

Publicado 30 artigos originais · ganhou elogios 1 · vista 1142

Acho que você gosta

Origin blog.csdn.net/u010906468/article/details/104879857
Recomendado
Clasificación