1、Release 模式保留调试信息
-
Release 模式默认会开启代码优化、移除调试符号(如变量名、函数行号),而 dump 文件需要调试符号才能解析出具体的崩溃位置。
-
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 模块
-
通过
.pri
文件统一管理 qBreakpad 的编译依赖(头文件、库文件),避免在每个模块中重复配置。 -
注意:若使用 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文件
- 将dump文件拖入到visual studio中,点击设置符号路径
- 将程序生成的.pdb文件夹位置添加到符号文件位置
- 点击使用仅限本机进行调试