Qt下使用DbgHelp和SetUnhandledExceptionFilter来获取Crash log/dump文件

2023-11-13

第一步:在pro中链接Lib

LIBS += -lDbgHelp

第二步:在main源文件中添加

#include <windows.h>

第三步:在main源文件中创建回调函数:

LONG CreateCrashHandler(EXCEPTION_POINTERS *pException){
    //创建 Dump 文件
    QDateTime CurDTime = QDateTime::currentDateTime();
    QString current_date = CurDTime.toString("yyyy_MM_dd_hh_mm_ss");
    //dmp文件的命名
    QString dumpText = "Dump_"+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));
    HANDLE DumpHandle = CreateFile((LPCWSTR)dumpText.utf16(),
             GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if(DumpHandle != INVALID_HANDLE_VALUE) {
        MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
        dumpInfo.ExceptionPointers = pException;
        dumpInfo.ThreadId = GetCurrentThreadId();
        dumpInfo.ClientPointers = TRUE;
        //将dump信息写入dmp文件
        MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),DumpHandle, MiniDumpNormal, &dumpInfo, NULL, NULL);
        CloseHandle(DumpHandle);
    }
    //创建消息提示
    QMessageBox::warning(NULL,"Dump",QString("ErrorCode%1  ErrorAddr:%2  ErrorFlag:%3 ErrorPara:%4").arg(errCode).arg(errAddr).arg(errFlag).arg(errPara),
        QMessageBox::Ok);
    return EXCEPTION_EXECUTE_HANDLER;
}

第四步:在main函数中添加注册dump回调函数

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //获取系统编码
    QTextCodec *codec = QTextCodec::codecForLocale();    
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
    //注冊异常捕获函数
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CreateCrashHandler);
    /***代码实现***/
}

这样就可以实现crashlog的保持和警告窗口提示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt下使用DbgHelp和SetUnhandledExceptionFilter来获取Crash log/dump文件 的相关文章

随机推荐

  • Nginx 代理解决跨域问题分析

    当你遇到跨域问题 不要立刻就选择复制去尝试 请详细看完这篇文章再处理 我相信它能帮到你 分析前准备 前端网站地址 http localhost 8080 服务端网址 http localhost 59200 首先保证服务端是没有处理跨域的
  • Android注册登录页面

    Android注册登录页面 需求 分析 项目目录 java domain JsonBean java UserInfo java utils GetJsonDataUtil java Login java MainActivity java
  • 前端实现预览功能,播放rtsp视频流(node.js+ffmpeg+flv.js)

    实现思路 获取摄像头rtsp流 通过node js ffmpeg转码 通过哔哩哔哩flv js播放 1 获取摄像机RTSP流 之前文章有说明不多阐述 2 配置流媒体服务器 1 下载安装node js 运行node js 网上教程很多自行下载
  • XGBoost-工程实现与优缺点(中)

    工程实现 块结构设计 我们知道 决策树的学习最耗时的一个步骤就是在每次寻找最佳分裂点是都需要对特征的值进行排序 而 XGBoost 在训练之前对根据特征对数据进行了排序 然后保存到块结构中 并在每个块结构中都采用了稀疏矩阵存储格式 Comp
  • 为什么MVC不是一种设计模式

    比较Backbone和Ext4 x在MVC实现上的差异 大漠穷秋 前言 圣人云 不想做妈咪的小姐不是好码农 每一个码农的心中都有一个终极理想 那就是有一天不用再Coding 在成为妈咪的道路上 设计模式 被认为是一项必备的技能 因此 经常有
  • python sys.path.append()和sys.path.insert()的作用与区别

    python程序中使用 import XXX 时 python解析器会在当前目录 已安装和第三方模块中搜索 xxx 如果都搜索不到就会报错 使用sys path append 方法可以临时添加搜索路径 方便更简洁的import其他包和模块
  • Eclipes下载并且导入GitHub中的maven项目

    第一步 确保eclipse装有git和maven插件 最新的eclipse不需要下载应该都集成了这些基本的功能 如果没有这两个插件自己下载安装 第二步 下载GitHub项目 拷贝想要下载的项目URL eclipse gt gt gt Fil
  • C#调用C++封装的SDK库(dll动态库)——下

    C 调用C 封装的SDK库 dll动态库 下 一 说明 上一篇我们相当于封装的是C语言风格的动态dll库 供C 来调用的 C 调用C 封装的SDK库 dll动态库 上 如果我们要封装的是下面的类呢 我们该怎么办 大家先思考下 class C
  • Excel中的VLOOKUP函数

    这几天开始刷计算机二级Office的题库 怎么说呢 遇到了很多之前根本就不知道的函数 并且感觉很有用 所以想把一些考试频繁要考的 同时也是很实用的函数一点一点的记下来 今天我来谈一下在Excel里面的一个查找函数 VLOOKUP函数 这个函
  • 小小程序员预备上路

    2011正式接触代码 进入CSDN乐知学院PHP方向 这篇博客便是我所有的成长的见证 至今 大大小小的项目做过不少 项目中学会了很多 怎么与小组默契配合 提高效率 大一第一次的项目 纯HTML静态网页 班级40个人5人一小组 总共8组 稀里
  • 手机投屏不是全屏怎么办_手机投屏怎么满屏

    手机投屏是很多小伙伴们都喜欢玩的 不少小伙伴们小伙伴们在使用手机投屏的时候发现不能满屏 想要知道方法的小伙伴们 就让小编给大家详细的讲讲满屏方法吧 手机投屏怎么满屏 1 手机具有投屏的功能 目前大多数手机都已经具备发无线投屏的功能 2 电视
  • Linux 部署 Mycat 实现 MariaDB 分库分表

    安装请参照Mycat 实现 Mysql 集群读写分离 高飞的博客 CSDN博客MySQL 读写分离的概述https blog csdn net gaofei0428 article details 117503469 spm 1001 20
  • 【Stable Diffusion】安装过程中常见报错解决方法

    转自 https openai wiki stable diffusion error html 如何查看报错 在你安装时可能经常遇到各种各样的问题 但是对于一堆陌生的英文和各种各样的错误 大家可能经常无从下手 下面我将会教大家如何查看报错
  • SQL Server研习录(29)——sql server 设置列自增长

    SQL Server研习录 29 sql server 设置列自增长 版权声明 一 设置列自增长 1 创建表时 2 创建表后 版权声明 本文原创作者 清风不渡 博客地址 https blog csdn net WXKKang 一 设置列自增
  • kali Linux2021安装VMwareTools更新源(详解)

    VMwareTools安装 1 点击虚拟机设置 点击安装VMwareTools 2 打开kali进入界面 双击界面中的VMwareTools 3 进入界面中VMwareTools所在文件中复制压缩包到 目录中的tmp里 4 在tmp中打开终
  • 基于 Android 13 的 Activity 启动流程分析

    对于 Android 客户端开发者来说 Activity 是我们再熟悉不过的一个组件了 它是 Android 四大组件之一 是一个用于直接与用户交互的展示型 UI 组件 在开发过程中 启动并创建一个 Activity 流程非常简单 而在系统
  • 平面二维任意椭圆数据拟合算法推导及程序实现详解

    在刚刚过去的2017全国大学生数学建模比赛中 笔者有幸指导了一组本科学生参赛 对于赛题A CT系统参数标定及成像 中的CT系统参数标定 经过将问题进一步的提炼 问题最终变成了在平面二维空间中对任意椭圆进行拟合的问题 笔者花了大概四个小时的时
  • 战斗系统设计

    战斗设计 战斗技能 技能分类 普通攻击 被动技能 1 战斗开始时 2 间隔N次普攻后触发 3 阵亡时 4 生命低于x 触发 5 概率触发 优先级最低 6 替换普攻 7 有FindTargetRange单位靠近自身N米时触发 主动技能 属性技
  • 微信小程序text控件部分字体文字大小和颜色设置四

    在我们android中有的时候会要求textview控件显示文字部分颜色不同而且大小也不同 这个在微信小程序中怎么做呢 因为在微信小程序中所有的显示都是通过标签来实现的 那么标签时可以嵌套的 比如显示hello world 要求hello颜
  • Qt下使用DbgHelp和SetUnhandledExceptionFilter来获取Crash log/dump文件

    第一步 在pro中链接Lib LIBS lDbgHelp 第二步 在main源文件中添加 include