Qt 使用 Google Breakpad 捕获程序崩溃报告(dump文件)

Qt 使用DbgHelp在程序崩溃时获取dump文件 网上搜索此问题,得到的大多是以下内容: (引用来自:https://www.cnblogs.com/ybqjymy/p/13049295.html) 第一步:在pro中链接Lib LIBS += -lDbgHelp 或 #pragma comment(lib , "DbgHelp.lib") 第二步:在main源文件中添加 #include <windows.h> 第三步:在main源文件中创建回调函数: LONG CreateCrashHandler(EXCEP 阅读详情
AI摘要

本文介绍如何在Windows环境下使用GoogleBreakpad为Qt应用程序捕获崩溃时的dump文件,以便于后续的问题定位和修复。文章详细展示了配置开发环境、添加所需库文件和头文件的过程,并提供了一个简单的示例程序。

一、简述

在上一篇文章 Google Breakpad 在 windows下捕获程序崩溃报告中,简单介绍了Google Breakpad,同时讲解了如何如何获取Google Breakpad源码、环境的配置,以及自带demo的测试过程,今天就讲述一下如何使用Google Breakpad来帮我们自己的程序在崩溃的时候获取dump文件。下面我用Qt的程序为例,其他项目建立过程都基本类似,而且Google Breakpad跟我们用什么开发没什么多大关系,主要是了解如何去用Google Breakpad来帮助我们捕获崩溃文件。

二、如何使用Google Breakpad

**开发环境 : win8 + VS2013 **

(1)、首先我们建立一个Qt项目。

这里写图片描述

(2)、修改BreakTest工程属性。

修改exe生成目录

这里写图片描述


添加静态库文件

这里写图片描述


附加库目录,我们添加了lib库文件,但是未指定库文件目录,这里使用相对路径,防止程序在路径改变后找不到库文件。

这里写图片描述


附加包含目录

这里写图片描述

当前配置应选择Release模式,同时需要设置Release模式下可调试,方可生成在生成exe时生成.pdb调试信息文件,通过以下两个步骤实现

在这里插入图片描述

在这里插入图片描述


下面是GoogleBreakpad捕获崩溃文件需要的lib文件及头文件在我建立工程下的文件位置(确保文件位置正确,否则编译不会通过)

这里写图片描述

这里使用到的库文件从GoogleBreakpad源码中common、crash_generation_client、exception_handler三个工程生成的.lib文件,有兴趣的小伙伴可以自己附加这几个工程到项目中然后生成我们需要的lib文件。
如果想简单点可以直接从下面链接中下载,然后解压到我们需要使用的工程中。

GoogleBreakpad捕获崩溃文件需要的文件,包括lib库文件及头文件下载

这里写图片描述

其中我将common、crash_generation_client、exception_handler这三个工程分别进行了动态编译和静态编译,本例的工程中用到的为动态编译的lib文件。(至于动态编译和静态编译不懂的小伙伴可以自行百度一下)
这里写图片描述

(三)、添加代码

main.cpp
#include "breakpadtest.h"
#include <QtWidgets/QApplication>
#include "client/windows/handler/exception_handler.h"
#include <QDebug>

// 程序崩溃回调函数;
bool callback(const wchar_t *dump_path, const wchar_t *id,
	void *context, EXCEPTION_POINTERS *exinfo,
	MDRawAssertionInfo *assertion,
	bool succeeded)
{
	if (succeeded) 
	{
		qDebug() << "Create dump file success";
	}
	else
	{
		qDebug() << "Create dump file failed";
	}
	return succeeded;
}

int main(int argc, char *argv[])
{
	// 创建捕捉程序异常对象;
	google_breakpad::ExceptionHandler eh(
		L".", NULL, callback, NULL,
		google_breakpad::ExceptionHandler::HANDLER_ALL);

	QApplication a(argc, argv);
	BreakPadTest w;
	w.show();
	return a.exec();
}

为BreakPadTest中添加一个按钮,下面为按钮点击的槽函数,从代码中可以看到按钮点击后将导致程序崩溃。
void BreakPadTest::onButtonClicked()
{
	int *i = NULL;
	*i = 0;
}

(四)、生成解决方案,在程序生成目录,点击exe运行程序

这里写图片描述

点击下面的按钮,我们发现程序崩溃闪退,同时我们发现exe所在目录成功生成了 dmp文件。

这里写图片描述 这里写图片描述

(五)、根据dmp文件,恢复程序崩溃时的状态。

用VS打开dmp文件,我们会看到程序崩溃时的一些信息。

这里写图片描述

点击右方的"使用 仅限本机 进行调试”按钮,我们可以看到程序崩溃的堆栈信息以及错误具体发生在具体哪一行代码。

这里写图片描述

从上面我们定位到了程序的崩溃位置,也发现了错误所在,下面就是修改bug了。

####有时候我们并不能根据程序崩溃的位置用肉眼直接发现问题所在,这就要根据堆栈信息查看具体是哪里出现了问题。


尾

这一篇中用图文的方式详细地介绍了如何为一个工程添加Google Breakpad来帮我们生成dmp文件来定位程序崩溃的原因。我将会在下一篇中详细讲解一下上文中使用的代码,虽然我们不需要了解Google Breakpad所有的源码,但至少上文中涉及的代码要有一点了解。


本文代码实例下载

02-跨平台的Qt程序崩溃之前生成Dump文件Breakpad Qt跨平台开发之崩溃捕捉并记录崩溃详情Breakpad一、崩溃捕捉记录的意义二、在Qt开发中怎样实现崩溃捕捉记录呢?三、Google breakpad简单介绍四、Google breakpad实现原理简单了解五、在Qt工程中集成Breakpad实现跨平台异常捕获六、qBreakpad的编译方法七、各平台下的例子工程下载地址 一、崩溃捕捉记录的意义 应用程序发布出去之后用户使用的过程中出现崩溃的情况... 阅读详情

相关推荐

Breakpad + Qt 崩溃捕获完整集成指南

Breakpad + Qt 崩溃捕获完整集成指南本文档提供从零开始将 Google Breakpad 崩溃报告系统集成到 Qt 应用程序的完整步骤,涵盖 Breakpad 编译、Qt 项目配置、崩溃测试、符号生成和堆栈解析。所有命令和代码均已在 Ubuntu 22.04 (x86_64) + GCC 11.4.0 + Qt 5.15.3 环境下验证通过。目录1.2 下载 Breakpad 源码并修复编译问题Breakpad 源码与新版 GCC 存在兼容性问题,需要手动打补丁。

ppss123456789的博客 428

Qt-异常捕获以及日志记录

Qt中的异常捕获以及Qt捕获不到异常现象的原因及解决方案,日志的接入及使用方法。

qq_48498725的博客 7567

Qt基础之三十六:异常处理

本文将介绍如何在Qt中使用try...catch和调试dump文件来处理异常。Qt版本5.12.6。

草上爬的博客 1万+

qt软件崩溃的分析方法-定位源文件和行号

软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。我们只需要在main函数中,SetUnhandledExceptionFilter(callback),软件崩掉时就会自动调用到callback函数中来,然后将相关信息(获取方法为开源类CCrashStack)写入到crash.log文件中,该函数中记录了当前寄存器状态,调用堆栈等信息。

biao2488890051的博客 6096

C++/Qt如何处理程序崩溃

在这个示例中,我们使用 `std::signal()` 函数来注册信号处理函数。当程序崩溃时,信号处理函数 `signalHandler()` 将被调用,并给用户一个提示,然后退出程序。// 捕获异常终止信号 // 在这里写你的程序代码 // ...在 C++ 中,程序崩溃时可以通过信号处理机制来捕获崩溃信号,并在程序崩溃时给用户一个提示。错误码:" << signal << std::endl;在信号处理函数中,我们可以添加一些额外的代码,比如记录日志等,以便更好地排查程序崩溃的原因。

xcksj666的博客 936

Qt之基于Breakpad实现跨平台崩溃捕获

Qt之基于Breakpad实现跨平台崩溃捕获。Breakpad是Google公司开源的跨平台C++崩溃检测库。Breakpad可以捕获发布给用户的应用程序的崩溃,并记录软件崩溃的调试信息到“minidump”文件中。软件崩溃时还可以把生成的“minidump”上传到自己的服务器上,这样就能方便的分析崩溃原因。

草上爬的博客 5029

dump系列(3)Qt使用Google Breakpad或Crashpad捕获程序崩溃报告

Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Linux和Mac和Solaris。由于他本身跨平台,所以很大的减少我们在平台移植时的工作,毕竟崩溃转储,每个平台下都不同,使用起来很难统一,而Google breakpad就帮我们做到了这一点,不管是哪个平台下的崩溃,都能够进行统一的分析。现在很多工程都在使用他:最著名的几个如Chrome,Firefox,Picasa和Google Earth。另外他的License是BSD的,也就是说,我们可以在商业软件中使

$firecat利白的代码足迹$ 6185

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1020

跨平台的Qt程序崩溃生成Dump文件Breakpad

跨平台的Qt程序崩溃生成Dump文件Breakpad 简介: 1、Window平台:可以使用“SetUnhandledExceptionFilter”来设置应用程序奔溃捕捉,这在崩溃的时候,这个函数指定的回掉函数就会被调用并返回崩溃详情。返回的崩溃详情为MiniDump格式。这个是windows提供的函数,因此必须包含“#include <Windows.h>”,具体的使用方法参考 W...

HiroGuo 的博客 5534

周志华《机器学习》课程系列笔记——目录导航页

最近自学机器学习课程,注意到了南京大学周志华老师的课程。我是在学堂在线平台观看的,注意到b站上也有相应视频,但b站上并未获得授权,随时有消失的可能。周志华老师的网络教学视频中,与其西瓜书相比确实少了一些内容。但幸运的是,缺失的内容实际上对于初学者来说并不会产生太大影响。目前这一笔记也遵循视频内容,相比西瓜书中也会有一些缺失,敬请谅解。可能以后如果有机会和时间,我会再阅读周志华老师的书籍将缺失内容补全。一切内容敬请关注我的个人Page页面。

Sinocifengs的博客 1688

ISO7816协议深度解析-简单易懂协议详解(一)-- 复位,字符帧,及ATR

1. 摘要 IC卡必须支持T=0或T=1的协议,但不是同时支持这两种协议,而终端则必须同时支持T=0和T=1的协议。 • T=0通讯协议是异步半双工字符传输协议; • T=1通讯协议是异步半双工块传输协议; 在ISO7816-3标准中,具体规定了这两种协议:T0和T1。 IC卡所用的协议在TD1中指定,如果在复位应答信息中没有TD1,则表示用T=0的协议进行通讯。在复位应答后,IC卡和终端之间即用IC卡指定的协议进行通讯。 2. 硬件接口 1)VCC:电源输入(A类:5V, B类:3V) 2)GND:地 3

代码打工人的博客 4万+

【Qt 学习之路】抓取崩溃信息(读这一篇就够了)

笔者抓取应用程序的崩溃,当时是在windows上用mingw编译器进行编译的程序,可以直接用微软提供的 SetUnhandledExceptionFilter() 方法来实现(msvc编译器略有不同)。如果在mac上用clang编译器,就不能用这一套了。好奇读小伙伴会想,有没有一种在各个平台上都能用的崩溃处理方案呢?答案是肯定的。谷歌提供了一套跨平台的崩溃转储和分析框架和工具集合Google breakpad。

沙师弟专栏 1万+

自抗扰控制(ADRC)理论与工程实践:8.1 自适应ADRC与参数在线整定

自适应自抗扰控制(AADRC)针对传统固定参数ADRC在动态变化系统中的局限性,提出通过在线调整关键参数(如观测器带宽ω₀、控制器带宽ω_c)以适应对象动态变化。主要方法包括基于稳定性理论的自适应律设计和基于性能指标的优化调节,前者保证闭环稳定但设计复杂,后者通过梯度搜索或模糊规则实现性能优化但缺乏严格稳定性证明。当前挑战在于非线性时变系统的稳定性分析、参数变化速率限制及工程实现的计算负担。AADRC拓展了ADRC在变参数系统(如无人机、软体机器人)中的应用,是迈向自主智能控制的关键技术。

技术工作者 215

Qt中使用Google Breakpad捕获程序崩溃异常

Qt中使用Google Breakpad捕获程序崩溃异常 Linux下如何捕获程序崩溃异常的方法 Google Breakpad源码的下载和编译 下载breakpad git clone https://github.com/google/breakpad.git 下载linux_syscall_support.h 从https://chromium.googlesource.com...

yuanfujie的博客 1205

“华为杯”研究生数学建模竞赛2017年-【华为杯】B题:面向下一代光通信的 VCSEL 激光器仿真模型

得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰值向。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状。方案,包括可能的数学公式,不同温度和偏置电流下的带宽响应曲线,并与问题。线,得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状逐渐变得。得的激光器特性曲线和模型中仿真得到的特性曲线,之后,可以将两组曲线的差。说明的是,由于数值优化算法的成功与否很大程度上依赖于初始参数的猜测,参。

getusushu的博客 99

SAP CPI 如何代理第三方接口?

代理接口是指在系统 A 和系统 B 之间引入一个中间层(如 SAP CPI),由中间层负责接收来自系统 A 的请求,进行必要的处理或转换,然后将请求转发给系统 B。由于 OData 服务通常使用 JSON 格式的数据,而某些内部系统可能需要 XML 格式,因此我们添加一个 JSON 到 XML 的转换器,以确保数据格式的兼容性。为了确保返回的数据格式符合内部系统的要求,添加一个 XML 到 JSON 的转换器,将 OData 服务的响应从 XML 转换为 JSON。在集成包中,添加一个新的集成流,命名为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1748

【QT 定位程序异常结束位置】arm环境使用 breakpad 实现程序异常崩溃定位

前言 实现在ubuntu/arm环境下 定位QT程序异常退出位置。 Google - Breakpad Breakpad 是 Google 公司开发的开源 跨平台C++崩溃检测库。Breakpad可以捕获发布给用户的应用程序的崩溃,并记录软件崩溃的调试信息到 minidump 文件中。调试信息包括错误行号,报错详情,堆栈错误。 程序运行效果 异常代码位置 异常退出位置 ubuntu环境 Breakpad编译 1.下载breakpad源码 官网地址:https://github.com/google/brea

qq_37373742的博客 3390

【RV1126/RV1109学习笔记】#基础篇#(2)基础入门使用

一、调试方式 1、串口调试 2、ADB调试 3、网络调试 二、基础外设使用 音频使用(aplay,arecord,amixer) 三、WIFI连接 四、屏幕背光控制

丨晋丨 1863

QT 使用Google Breakpad 捕获dump

我们用QT 开发windows 应用程序,有的时候程序发生了crash ,光靠log 有的时候无法找到问题,很多时候应用程序给到其他的人使用,尤其是一些偶发的问题很难复现,这个时候我们就需要一些其他的方式来解决问题。使用比较简单,引用头文件,然后定义一个ExceptionHandler,当工具发生crash 的时候会在指定的文件夹中生成一个dump file,我们可以用windbg 来分析dump 文件找到crash的原因。breakpad 编译lib的时候需要注意选择MD,保持QT 和lib之间的一致。

cwei231的博客 721

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux qt程序崩溃_QT中使用google breakpad捕获程序崩溃异常

今天给大家介绍一个在linux下如何捕获程序崩溃异常的方法一、google breakpad源码的下载和编译1、https://github.com/google/breakpad.git,源码地址,git clone xxx克隆即可2、cd breakpad3、./configure4、make5、make完这里会报错breakpad/src/third_party/lss/linux_sysc...

weixin_33700809的博客 857

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

qt如何在linux程序中捕获异常信号,QT中使用google breakpad捕获程序崩溃异常

今天给大家介绍一个在linux下如何捕获程序崩溃异常的方法一、google breakpad源码的下载和编译1、https://github.com/google/breakpad.git,源码地址,git clone XXX克隆即可2、cd breakpad3、./configure4、make5、make完这里会报错breakpad/src/third_party/lss/linux_sysc...

weixin_31208627的博客 841

Qt Linux 崩溃文件:core dump/Breakpad/gdb 还原

程序崩溃定位通常从崩溃文件开始:Linux 下的 core dump 会在进程收到致命信号时,按 core_pattern 与 RLIMIT_CORE 规则保存内存快照;Breakpad minidump 则在进程内捕获线程栈、寄存器与模块列表。其原理是保留现场信息,再用 gdb、dump_syms 和符号仓库把地址还原成函数名。对 Qt 桌面端、嵌入式界面和工控上位机而言,这能把偶发闪退变成可复盘的证据,并支撑上报、归档与版本匹配。围绕 ulimit、systemd-coredump、信号捕获与日志补全建

weixin_34081595的博客 442

qt如何在linux程序中捕获异常信号,[操作系统]QT中使用google breakpad捕获程序崩溃异常...

[操作系统]QT中使用google breakpad捕获程序崩溃异常0 2018-09-11 19:00:42今天给大家介绍一个在linux下如何捕获程序崩溃异常的方法一、google breakpad源码的下载和编译1、https://github.com/google/breakpad.git,源码地址,git clone XXX克隆即可2、cd breakpad3、./conf...

weixin_36051281的博客 465
上一篇: Google Breakpad 在 windows下捕获程序崩溃报告
下一篇: Google Breakpad 捕获程序崩溃报告代码简解
前行中的小猪
前行中的小猪 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄10年 4万+粉丝 134原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值