Qt 项目中集成 qBreakpad 生成崩溃 dump 文件

1、Release 模式保留调试信息

  1. Release 模式默认会开启代码优化、移除调试符号(如变量名、函数行号),而 dump 文件需要调试符号才能解析出具体的崩溃位置。

  2. QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO:开启 Release 优化 + 保留调试符号

    复制代码
    # 对 C++ 编译选项:使用"带调试信息的 Release 编译 flags"
    QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
    # 对链接选项:使用"带调试信息的 Release 链接 flags"
    QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

2、引用 qBreakpad 模块

  1. 通过 .pri 文件统一管理 qBreakpad 的编译依赖(头文件、库文件),避免在每个模块中重复配置。

  2. 注意:若使用 MinGW 编译器,LIBS 中的库文件后缀会变为 .a(如 -lqBreakpad.a),且路径需对应 MinGW 版本的库。

    复制代码
    # 1. qBreakpad 依赖的 Qt 模块(根据实际版本调整,部分版本可能不需要 network)
    QT += network
    # 2. 编译选项:启用线程、异常处理、RTTI(运行时类型信息)、STL 支持
    #    (qBreakpad 内部使用这些特性,缺少会导致编译失败)
    CONFIG += thread exceptions rtti stl
    
    # 3. 头文件路径:指定 qBreakpad 头文件所在目录($${PWD} 是当前 .pri 文件的路径)
    INCLUDEPATH += $${PWD}/include
    # 4. 库文件路径:指定 qBreakpad 静态库(.lib)所在目录,并链接库文件
    LIBS += -L$${PWD}/lib -lqBreakpad

3、初始化 qBreakpad 并设置 Dump 路径

复制代码
   1. 首先包含 qBreakpad 的头文件
   2. 设置 Dump 文件路径(关键:路径必须可写入)
   3. 初始化 qBreakpad(QBreakpadInstance 通常是 qBreakpad 提供的单例类)
   QBreakpadInstance::instance()->setDumpPath(dumpPath);  // 不同 qBreakpad 版本的接口可能不同,需匹配

4、调试dump文件

  1. 将dump文件拖入到visual studio中,点击设置符号路径
  2. 将程序生成的.pdb文件夹位置添加到符号文件位置
  3. 点击使用仅限本机进行调试
相关推荐
Quz4 小时前
QML TextField 应用:自动关联与表单提交
qt
sycmancia6 小时前
Qt——自定义控件温度计
开发语言·qt
艾莉丝努力练剑7 小时前
【Qt:问题解决】Qt程序入口点错误修复:MinGW ABI兼容问题
java·服务器·开发语言·qt·文件系统·动静态库
我是小灰灰吖18 小时前
QT在线安装器使用指南:从下载到配置完整教程
linux·qt·ubuntu
C++ 老炮儿的技术栈21 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
我是小灰灰吖1 天前
Ubuntu 22.04 + Qt 6.9.3 应用程序打包与部署完整指南
qt·ubuntu
qq_401700411 天前
Qt自定义信号槽详解:带参发射 vs sender()获取,两种多信号关联方案全掌握
java·数据库·qt
郝学胜-神的一滴1 天前
Qt 高级编程 042:进度条从入门到自定义美化
开发语言·c++·qt·软件开发·用户界面
AI的探索之旅1 天前
嵌入式视觉学习路线:Qt + OpenCV + 工业相机,从零到综合项目
qt·opencv·学习
我是小灰灰吖1 天前
Ubuntu22.04,OpenCV 4.5.5 环境搭建
linux·qt·ubuntu