C++调试(叁):编译qBreakpad并使用其生成Dump文件
目录
1.前言
2.生成Dump文件的第三方库
3.第三方库下载链接
4.编译qBreakpad
5.VS中使用qBreakpad
6.qBreakpad测试程序
前言
在第二篇文章中,我主要讲解了如何使用SetUnhandledExceptionFilter函数设置程序的异常回调,在设置的回调函数中调用MiniDumpWriteDump接口函数生成的dump文件。而本小节将是对于生成Dump文件的扩展,主要是讲解多种不同的第三方库生成Dump文件,而本篇博客的重点将是对于qBreakpad进行讲解。
生成Dump文件的第三方库
本小节将对本篇讲解的所有第三方库进行一个简单的汇总,主要讲解的有以下几个库:
1.CrashRpt:该库仅支持Windows系统,能快速为 Windows 桌面应用添加崩溃报告功能,无需跨平台支持。但是该库非谷歌官方维护,社区活跃度较低
2.Breakpad:该库能支持跨平台使用,主要是针对需要轻量级、跨平台崩溃捕获的 C/C++ 项目。该库属于是谷歌开源项目,仍被维护但逐渐被 Crashpad 取代。
3.qBreakpad:该库依赖于Qt,支持跨平台使用,主要针对的场景是专为 Qt 应用程序设计,简化集成流程,能自动处理 Qt 事件循环与信号。该库基于Breakpad的第三方封装,主要由社区维护。
4.Crashpad:该库支持跨平台使用,支持HTTP上传Dump文件,主要针对的是需要现代崩溃报告系统且长期维护的项目。该库由谷歌官方维护,作为Breakpad的现代化第三方库的替代。
根据这些总结,我汇总为一个表格,方便阅读。
第三方库 | 是否跨平台 | 维护状态 | 优势 | 适用场景 |
CrashRpt | 仅支持Windows | Windows社区维护 | 自带 UI 和上传功能 | 快速集成 Windows 应用 |
Breakpad | 支持 | 逐渐被淘汰 | 轻量、灵活 | 需自定义流程的跨平台 C/C++ 项目 |
qBreakpad | 支持 | 社区维护 | Qt 深度集成 | Qt 应用程序 |
Crashpad | 支持 | 谷歌官方积极维护 | 支持上传、长期维护 | 新项目或需长期维护的复杂系统 |
PS:在使用CrashRpt库时,若引入的第三方库在CrashRpt后才导入,会导致这些提前引入的第三方库没有挂载到异常回调函数,从而使部分库出现异常时不会生成dump文件
第三方库下载链接
1.CrashRot下载链接
CrashRpt - A crash reporting system for Windows applicationshttps://crashrpt.sourceforge.net/ 2.Breakpad下载链接
google/breakpad: Mirror of Google Breakpad projecthttps://github.com/google/breakpad 3.qBreakpad下载链接
qBreakpad: Cross-platform Qt crash handler, implemented as wrapper around google-breakpadhttps://github.com/buzzySmile/qBreakpad 4.Crashpad下载链接及文档
chromium/crashpad: A crash-reporting systemhttps://github.com/chromium/crashpadCrashpad: Crashpad Interface Documentation
https://crashpad.chromium.org/doxygen/index.html
编译qBreakpad
本小节将对如何编译qBreakpad进行讲解,该库需要依赖于Breakpad和LSS这两个第三方库,其中qBreakpad和Breakpad的下载链接已经提供在第二小节,而LSS的链接如下:
LSShttps://github.com/ithaibo/linux-syscall-support
接下来将对如何编译qBreakpad进行讲解,作者使用的环境是Qt5.15.1MSVC2019 64bit。具体编译步骤如下:
1.下载qBreakpad,Breakpad和LSS并解压
图1.下载qBreakpad,Breakpad和LSS并解压
2.将解压的Breakpad源码移动到qBreakpad的third_party文件夹下的breakpad文件夹中
图2.移动Breakpad源码
3.将解压的LSS源码移动到qBreakpad的third_party文件夹下的lss文件夹中
图3.移动LSS源码
4.使用Qt打开qBreakpad的pro文件
图4.打开pro文件
5.选择Qt编译套件
图5.选择编译套件
6.qBreakpad文件夹解析
图6.文件夹解析
7.编译Debug模式下的lib文件
图7.debug模式下的lib文件
8.编译Release模式下的lib文件
图8.Release模式下的lib文件
VS中使用qBreakpad
编译完成qBreakpad后,我们需要在项目中使用qBreakpad,接下来将讲解如何在Vs中使用qBreakpad第三方库生成项目,后续也会附上博主的项目示例开源链接。
1.将handler文件夹下的QBreakpadHttpUploader.h,QBreakpadHttpUploader.cpp,QBreakpadHandler.h和QBreakpadHandler.cpp文件复制到项目路径下
图9.移动文件至项目路径
2.在项目中导入Qt模块
图10.导入Qt模块
3.引入附加包含目录
图11.引入附加包含目录
4.引入lib文件路径
图12.引入lib文件路径
5.引入lib文件名称
图13.引入lib文件名称
完成以上配置即可在项目中使用qBreakpad第三方库
qBreakpad测试程序
这是一个由作者自己编写的测试程序,仅供参考。
#include "QBreakpadHandler.h"int main(int argc, char *argv[])
{QBreakpadInstance.setDumpPath("E:\Release"); // 设置生成dump文件路径return 0;
}
在完成项目对qBreakpad第三方库的配置以后,只需要在main文件中添加QBreakpadInstance.setDumpPath()接口函数,指定生成dump文件的路径即可。接下来是作者项目的开源链接,如下:
qBreakpad测试项目https://github.com/3020Xmy/QBreakpadTest