QT通过QBreakpad捕捉崩溃

这篇具有很好参考价值的文章主要介绍了QT通过QBreakpad捕捉崩溃。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在公司项目上遇到程序运行时崩溃,也不好在log日志中定位。查找了资料发现,谷歌的一个开源项目Breakpad,统一了这三平台win、linux、mac生成dump的方式来捕捉崩溃。

大致研究了一下,主要依赖一个静态库和几个头文件,我这边编译出来放到网盘上大家自行使用。

链接: https://pan.baidu.com/s/19elsFxnKfzdNaX6cURruAw?pwd=JJLM 提取码: JJLM 

用法就是在工程文件pro里引入库:

############ for qBreakpad ############
# qBreakpad中需要使用到network模块
QT += network

# 启用多线程、异常、RTTI、STL支持
CONFIG += thread exceptions rtti stl

# without c++11 & AppKit library compiler can't solve address for symbols
CONFIG += c++11
macx: LIBS += -framework AppKit

# 配置头文件搜索路径和链接库路径
win32:CONFIG(release, debug|release): {
LIBS += -L$$PWD/qbreakpadlib/lib/release/ -lqBreakpad
DEPENDPATH += $$PWD/qbreakpadlib/lib/release
} 
else:win32:CONFIG(debug, debug|release): {
LIBS += -L$$PWD/qbreakpadlib/lib/debug/ -lqBreakpad
DEPENDPATH += $$PWD/qbreakpadlib/lib/debug
}

INCLUDEPATH += $$PWD/qbreakpadlib/include

############ for qBreakpad ############

然后在main.cpp中添加调用代码,如下:

 1 #include "qBreakpadTest.h"
 2 #include <QApplication>
 3 
 4 #include "QBreakpadHandler.h"
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     QApplication a(argc, argv);
 9     
10     QBreakpadInstance.setDumpPath("crashes");    // 设置生成dump文件路径
11     qBreakpadTest w;
12     w.show();
13     return a.exec();
14 }

之后程序如果崩溃会在你设置的路径位置生成一个bmp文件,拿到这个文件与程序的pdb文件就可以定位到具体某一行了,具体操作方法如下:

我这里使用VS 2019,来进行如下的操作。

Vs文件菜单下,选择“打开”->“文件”,如下:(也可以直接选择拖拽dump文件到Vs也是一样)

QT通过QBreakpad捕捉崩溃

 找到dump文件,并打开,可以看到转储摘要模块等,但是并不能发现问题何在。如下:

QT通过QBreakpad捕捉崩溃

 接下来,点击“设置符号路径”,点击“+”号,添加pdb文件路径,之后,“确定”。如下:

QT通过QBreakpad捕捉崩溃

 最后,点击“使用 仅限本机 进行调试”,可以很清楚的,定位到崩溃发生的代码行上。

注意,源码一定不能变化,哪怕只是更改加入了一行或者什么空格,都会导致定位错误或者只能定位大概位置,所以源码一定要和编译出exe时一致。

原文地址:Qt Windows系统使用QBreakpad实战_qbreakpad vs_Fu_Lin_的博客-CSDN博客

 文章来源地址https://www.toymoban.com/news/detail-696334.html

到了这里,关于QT通过QBreakpad捕捉崩溃的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu系统崩溃通过日志查看原因

    里面的日志包括: /var/log/syslog Syslog是一种标准的日志记录工具。它收集包括内核在内的各种程序和服务的消息,并根据设置将它们存储在通常位于 /var/log . 在某些数据中心设置中,有 数百个 设备,每个设备都有自己的日志; syslog 在这里也很方便。一个人只需设置一个专用

    2024年02月05日
    浏览(40)
  • 解决一个Qt程序崩溃的问题

    当Qt崩溃时,使用Qt Creator调试,也无法定位到是哪个地方除了问题。只发现日志报出一个Fatal。 触发的情况,就是使用QProcess同时启动多个进程时,主动退出进程导致的。 定位到代码的位置在: 这个 terminal 是在主线程被调用的。在process主动退出前,调用这个接口,就会卡死

    2024年02月06日
    浏览(32)
  • 通过Android Logcat分析firebase崩溃

    参考:UnityIL2CPP包Crash闪退利用Android Logcat还原符号表堆栈日志 - 简书 1、新建空白unity工程,打开PackageManager窗口,菜单栏Window/PackageManager 2、PackageManager中安装Android Logcat日志工具 3、安装AndroidLogcat完成 1.打包 在出包时勾选Create symbols.zip选项,在PlayerSettings面板中,出包选项从

    2024年01月25日
    浏览(46)
  • qt软件正常运行的崩溃了定位行号方法

    软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。因此,软件崩掉,我们需要能给出信息才行,指导我们修改源码。解

    2024年02月07日
    浏览(39)
  • Qt软件崩溃定位到源代码位置的方法

    如果写好了软件拿给别人用,当软件出现BUG时,则无法定位到出错位置,因此需要定位到错误位置,记录log文件; Qt编写一个槽函数: 在代码调试过程中可以定位到 当软件发布以后,便无法在编译器内定位到了,会出现如下情况: 下载dll文件:定位崩溃位置dll 将CrashDebugU

    2023年04月09日
    浏览(52)
  • qt软件崩溃的分析方法-定位源文件和行号

    软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。因此,软件崩掉,我们需要能给出信息才行,指导我们修改源码。解

    2024年02月07日
    浏览(46)
  • ChatGPT之后,下个AIGC杀手级应用已近在眼前

    鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 大模型模式,正在新一波AIGC的浪潮里被再度验证。 从AI画画的出圈,到现如今ChatGPT的火爆,面向大众的爆款产品接口背后,无不是大模型技术的突破创新。 而当这种“大力出奇迹”的技术路径价值愈发凸显,行业内外也不禁好奇:

    2024年02月10日
    浏览(48)
  • 寿险公司通过开源治理保障数字创新,安全打通高质量服务新通道

    某寿险公司致力于为消费者提供人性化的产品和服务,在中国保险市场中始终保持前列。该寿险公司以挖掘和满足客户需求为出发点,从产品开发、渠道销售、运营流程和售后服务等各环节,借助数字化工具,不断地努力探索并提升服务品质。 该寿险公司借助数字科技力量,

    2024年02月03日
    浏览(58)
  • 首个AI程序员诞生!已通过公司面试,掌握全栈技能,可独自开发完整项目

    3 月 13 日,由华人团队创立的 Cognition Labs 推出了第一个 AI 软件工程师 Devin,从目前公布的信息来看,说它是目前最强的 AI 软件工程师似乎一点也不过分,今天直接在 X 上刷屏。 在 SWE-Bench 基础测试中,无需人类协助,Devin 就可以解决 13.86% 的问题。而目前的 SOTA 模型,在没

    2024年04月11日
    浏览(61)
  • qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码

    初识Qt,进行开发时遇到一个崩溃问题 简单整理 可以明确看出,初始化时成员变量的值为空的字符串,然后执行memset后,该成员地址无法访问。 3.1.这里首先测试一下string等其他成员操作,没有出现问题。 3.2 分析QString的源码,了解原因(qtbase源码分析)。 简化后源码如下 :

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包