qt进阶2:windows下可执行程序崩溃生成dmp,定位崩溃问题。

系列文章目录


文章目录


前言

qt编译的可执行程序在windows下崩溃可生成dmp文件,用于调试定位崩溃原因。


一、dmp文件生成

略

二、使用步骤

1.代码案例

代码如下(示例):

untitled.pro(pro工程配置文件),添加以下代码

cpp 复制代码
LIBS += -lDbgHelp

main.cpp

cpp 复制代码
#include "mainwindow.h"
#include <QApplication>
#include <winsock2.h>
#include <dbghelp.h>
#include <windows.h>
#include <winnt.h>
#include <QMessageBox>
#include <QString>
#include <QTime>

LONG ExceptionCapture(EXCEPTION_POINTERS *pException)
{
    //当前时间串
    const int TIMESTRLEN = 32;
    WCHAR timeStr[TIMESTRLEN];
    SYSTEMTIME time;
    GetLocalTime(&time);
    swprintf_s(timeStr, TIMESTRLEN, L"%4d%02d%02d%02d%02d%02d", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond);
    WCHAR strname[MAX_PATH];
    swprintf_s(strname, MAX_PATH, L"application_%s.dmp", timeStr);

    //创建 Dump 文件
    HANDLE hDumpFile = CreateFile(strname, GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
    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, nullptr, nullptr);
    }

    //完成一些数据保存工作
    //.....

    //弹出错误对话框并退出程序
    QMessageBox::critical(nullptr,"错误提示",QString("当前程序遇到异常.\n  异常文件:%1").arg(QString::fromWCharArray(strname)),QMessageBox::Ok,QMessageBox::Ok);
    return EXCEPTION_EXECUTE_HANDLER;
}

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

    MainWindow w;
    w.show();

    //注冊异常捕获函数
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ExceptionCapture);
    //测试用
    int *p=nullptr;
    *p=100;

    return a.exec();
}

2.运行截图


该处使用的url网络请求的数据。


相关推荐
朝朝辞暮i1 天前
C++ 第一阶段总结:从零基础到 ROS2 前置语法
开发语言·c++·算法
2601_962885721 天前
如何用 Python 回测定投策略(定期定额 DCA)?(和一次性买入对比)
开发语言·人工智能·python
百事牛科技1 天前
7Z分卷文件怎么打开?7-Zip解压方法详解
windows·7-zip
周杰偷奶茶1 天前
【JavaSE】类和对象基础
java·开发语言
大圣编蚕1 天前
C语言核心知识复习:预处理、头文件、强制类型转换、错误处理、递归与内存管理
c语言·开发语言
虎大猫猫1 天前
Python教程——按位取反的原理
开发语言·python
Alice-YUE1 天前
提示词工程:工业级 Prompt 写法与分层组装
java·开发语言·大模型·prompt·提示词工程·system prompt
弹简特1 天前
【Java项目-企悦抽】17-抽奖模块02-抽奖接口实现
java·开发语言·状态模式·springboot
HEJOO91 天前
指针与结构体:C 语言进阶核心详解
c语言·开发语言·网络
乌暮1 天前
JVM 原理与实践:从运行时数据区到线上故障排查
java·开发语言·jvm·后端·学习·面试