QT5 项目设置release版本 可调试

  • Post author:
  • Post category:其他


  1. .pro文件中
#RELEASE版本可调试
QMAKE_CXXFLAGS_RELEASE = -Od -ZI -MD
QMAKE_LFLAGS_RELEASE = /DEBUG /INCREMENTAL:NO

QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /DEBUG
LIBS += -lDbgHelp

说明:

-Od:去掉编译器优化;

-ZI:控制生成pdb调试文件;

-MD:使用多线程库

2.main.cpp中

#include <Windows.h>
#include <DbgHelp.h>
#include <QApplication>
#include <QMessageBox>



// 保存程序异常崩溃的信息
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
    //创建 Dump 文件
    HANDLE hDumpFile = CreateFile(L"crash.dmp", 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);
    }

    //弹出一个错误对话框
    QMessageBox msgBox;
    msgBox.setText("application crash!");
    msgBox.exec();

    return EXCEPTION_EXECUTE_HANDLER;
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //注册异常捕获函数
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);

    // set printf and fprintf out immediately
    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stderr, NULL, _IONBF, 0);

    IspBurnTool w;
    w.show();

    return a.exec();
}

3.如下图,设置release构建配置

在这里插入图片描述



版权声明:本文为weixin_47946639原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。