Google Breakpad 捕获程序崩溃报告代码简解

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

一、简述

在上一篇 Qt 使用 Google Breakpad 捕获程序崩溃报告(dump文件) 中,我们用实例来演示了如何使用Google Breakpad 来捕获程序崩溃报告,主要引用三个lib文件以及一些头文件。实际写的代码很简单,下面简单介绍一下捕捉程序异常对象。

二、代码简解

#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();
}

我们使用google_breakpad::ExceptionHandler 创建了一个捕捉异常的对象,我们先看一下构造方法。在exception_handler.h 文件中。

这里写图片描述

const wstring& dump_path : 第一个参数指定了dmp文件生成的路径,在给定值时请确保路径存在,如果不存在,不会生成dmp文件。


FilterCallback filter : 程序崩溃后的回调函数,在生成dmp文件之前调用,并且FilterCallback 的返回值决定了Breakpad是否会生成dmp文件,返回true则继续处理异常,并写入dump文件,返回false,则停止处理,并且不会写入dump文件。下面为FilterCallback 回调函数的参数形式以及介绍。

这里写图片描述


MinidumpCallback callback : 程序崩溃后的回调函数,在生成dmp文件之后调用。其返回值表示当前是否已处理异常。返回true,说明当前已经处理完异常,不会再让其他处理者再对此异常进行处理、返回false,说明异常未处理,并且允许其他处理者进行处理。下面为MinidumpCallback 回调函数的参数形式以及介绍。

这里写图片描述


void* callback_context : 设备上下文,作为回调函数的参数,在回调函数中使用。


int handler_types : 捕捉异常的类型,通过HandlerType 来区分 当前处理程序应该捕获何种类型的异常。

注释中讲到了 HANDLER_NONE 不会捕获任何异常,但是如果手动调用 WriteMinidump 处理程序仍然会被触发,而HANDLER_ALL会捕捉所以的异常。

这里写图片描述


其实我们看到 ExceptionHandler 类还有其他两个构造函数,如下图,而这两个构造函数与上面相比多了三个参数,而区别是上面那个是进程内生成dmp文件,而下面两个构造函数用于进程外生成dmp文件。
这里写图片描述

这里写图片描述

尾

关于代码我们就简单介绍到这里,想要深入了解的小伙伴可以尝试查看Google Breakpad的源码。相关资料已经上传,小伙伴们可以通过下方链接下载查看。


相关文件下载

google_breakpad 源码

Google Breakpad 使用实例

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

Android Native Crash 捕获之 BreakPad Android Native Crash 的捕获其实是有好几种方案的,譬如 coffeecatch、crash 后新进程过滤 logcat、google BreakPad 等,系统层面就另当别论了,系统有那么强大的墓碑机制,所以不讨论墓碑情况。应用层方案来说,其各自都存在一些利弊或者兼容问题,综合来看,Android 系还是推荐使用 google BreakPad 实现,本文就抛开其他方案来聊聊 BreakPad 在 Android App 开发中的接入、使用、定位问题全过程吧。Breakpad 是什么。 阅读详情

相关推荐

Google Breakpad之六,mac平台crash

E文-》http://code.google.com/p/google-breakpad/wiki/MacBreakpadStarterGuide  有时候英文的意会,比中文翻译更能帮助理解。 如何把breakpad加入你的mac程序 How To Add Breakpad To Your Mac Client Application Preparing a binary bu

wpc320的专栏 5784

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

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

exlink2012的专栏 1360

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

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

草上爬的博客 5029

基于Google breakpad编译构建和使用案例

google breakpad 跨平台crash库编译构建使用案例

whish1994的博客 1429

Google Breakpad应用:崩溃分析工具指南

本文还有配套的精品资源,点击获取 简介:Google Breakpad是一个开源崩溃转储工具,支持Windows、Linux和macOS,旨在帮助开发者捕捉应用程序崩溃时的关键信息。该工具包括Minidump生成器、符号处理器和服务器组件,能够生成可读的堆栈跟踪,优化崩溃率统计和多进程支持。本文详细介绍了Breakpad的安装、配置、Minidump生成和处理方法,并解释了...

weixin_35756690的博客 2533

C++程序崩溃报告的获取与分析:Google Breakpad应用详解

C++作为一种性能强大的编程语言,其复杂的内存管理和指针操作常导致程序崩溃。理解崩溃的成因和处理机制是每个C++开发者必备的技能。从内存泄漏到异常未捕获,程序崩溃的原因多种多样,需要系统性的方法来诊断和解决。Google Breakpad是一个开源的崩溃报告系统,由Google公司开发,并于2008年公开发布。它主要被设计用来帮助开发者捕获和分析跨平台应用程序的崩溃信息。Breakpad的产生背景源于跨平台应用的开发和维护日益复杂,尤其在C++这样的底层语言开发的应用程序中,崩溃问题频发且难以追踪。

weixin_42350014的博客 1212

Android应用开发笔记:JNI的崩溃捕获及google-breakpad的使用

我们在进行Android的ndk开发时,由于C代码不好调试,我们往往采用日志记录的方式进行跟踪调试代码,比较麻烦,而且一旦C代码crash,很难直接定位到哪里出了问题。这里作者分享一个开源工程【 google-breakpad 】的使用,希望能对大家的C代码调试增加一点思路。 备注: 1)由于google-breakpad的分析对平台有兼容性要求,作者在ubuntu13.10 x6

4204

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

文件包含了使用GoogleBreakpad捕获崩溃文件需要的文件,包括lib及头文件,可以看我的博客里介绍了如何使用GoogleBreakpad生成dump文件,来分析程序崩溃原因。

电脑经常报app crashed-writeminidump问题

在电脑中搜索haozipminipage.删除即可,可能是因为杀毒软件,禁止了广告弹窗,

qq_41529264的博客 4659

google_breakpad 源码

google_breakpad 源码,一个非常实用的跨平台的崩溃转储和分析模块,能够捕获程序崩溃报告,生成dump文件。具体可以见我的博客——Google Breakpad 在 windows下捕获程序崩溃报告。

C++时间复杂度分析

如果想要知道一个程序运行需要花费多少时间,直接运行测试不是更简单更准确吗?何必去花精力推算复杂度!首先,这个想法没问题,确实可以直接跑出来,但这属于马后炮,无法提前预估算法的时间复杂度,而且也非常受限:1、测试结果在不同处理器上运行的结果会有很大波动2、即使在同一环境下运行,不同数据也会导致结果有很大波动所以需要一个不用具体测试就能评估程序执行效率的方法,也就是时间、空间复杂度分析方法。

hls0611的博客 3841

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

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

$firecat利白的代码足迹$ 6185

保姆级教程:在Windows 10/11上安装配置KNIME 5.8.0(含中文文本库更新)

本文提供在Windows 10/11系统上安装配置KNIME 5.8.0的详细指南,包括中文文本库更新和性能优化方案。从环境准备、安装流程到中文文本处理能力强化,逐步指导用户搭建高效的数据分析环境,特别针对国内网络环境和中文用户需求提供实用解决方案。

weixin_29081101的博客 670

Google Breakpad捕获程序崩溃异常

文章目录一、Linux平台1、下载2、编译安装3、环境配置二、Windows平台 一、Linux平台 1、下载 https://github.com/google/breakpad 2、编译安装 解压到目录breakpad,然后在命令窗口cd到改目录下。执行命令: ./configure --prefix=/opt/breakpad-ubuntu-x64 执行命令:make。会报错: In file included from ./src/client/linux/dump_writer_common/t

hezhanran的博客 3022

ABB机器人发送实时位置给PLC

本文使用中断方式实现,多任务要订购ABB功能包 Profinet总线组变量配置 注:映射为16位和32位均可用 声明数据 VAR num CurrentExAxisPos;!外轴位置 VAR robtarget pCurrentPos;!实时位置 var intnum TrapNum;!中断号 初始化开中断 IDelete TrapNum;!中断号 CONNECT TrapNum WITH iTrapCurPos;!连接中...

澍澍爸的blog 6778

Windows用户必看:如何在WSL中完美安装CosyVoice的ttsfrd依赖(附避坑指南)

本文为Windows用户提供了在WSL中部署CosyVoice语音合成模型并解决其关键依赖ttsfrd的完整指南。文章详细介绍了从WSL环境配置、Python环境搭建、模型下载到ttsfrd深度安装与问题排查的全流程,并针对WSL特有的文件系统、权限和GPU支持问题提供了解决方案,帮助开发者高效攻克部署难题。

dell8的博客 248

c++程序使用google的breakpad捕获崩溃

介绍 Google Breakpad是Google用C ++构建的崩溃报告工具。它允许您的程序在发生崩溃时将小型转储提交到配置的URL。使用它可以处理Windows, OS X和 Linux 应用程序的崩溃 。 只需几个简单的步骤,即可配置启用Breakpad的应用程序,以将崩溃报告发送到BugSplat。 废话不多说,直接说搭建流程,另外本人所有操作是在windows环境下完成。 1.下载breakpad源码 breakpad源码可在 https://chromium.googlesource.com/b

qq_26611129的博客 1851

健康保险费用预测:可解释机器学习在精算建模中的实战落地

健康保险费用预测是医疗AI与保险科技交叉领域的核心任务,本质是基于临床变量与社会因素对个体医疗支出进行风险量化。其技术原理需兼顾统计建模能力与监管可解释性,XGBoost+SHAP组合因支持特征归因、边际效应分析和临床可干预推演,成为保险精算场景的主流选择。该技术显著提升保费定价精度、降低偿付风险,并支撑DRG费用预警、团险核保辅助及再保险尾部风险评估等关键应用。本文聚焦真实产线中的时间序列验证、临床分层特征工程与监管红线指标(如Bias@90th、Calibration Slope),深入解析如何让模型不

weixin_33702545的博客 306

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

微信小程序|基于小程序+云开发制作一个菜谱小程序

今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

【Java基础】还看不懂JDK7 HashMap环的产生原理你来打我

JDK7对旧table数据重定位到新table的函数transfer如下,其中重点关注部分以标出。 头插法正常情况下: 并发情况下 线程1只执行了Entry<K,V> next = e.next就被挂起了,而线程2正常执行完毕,结果图如下: 线程1接着下面继续执行: 通过逐步分析跟绘图可以知道红色部分会有环产生。 ...

sowhat 4244

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

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

HiroGuo 的博客 5534

全新YOLOv11有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

YOLOv11专栏持续更新500+种创新改进方案,涵盖卷积优化、注意力机制、主干网络、Neck特征融合、检测头、小目标检测等核心模块。提供独家创新点组合方案、模型轻量化改进及最新Mamba架构融合技术,配套完整实验代码和训练参数解析。订阅用户可加入专属答疑群,获取一键运行项目支持。专栏包含YOLOv11网络结构详解、配置文件解读等入门必读内容,助力科研论文发表与模型性能提升。限时开放订阅通道,提供多种涨点改进方案组合,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 4006

使用 Google Breakpad 来助力解决程序崩溃

好了,本篇教程到此就结束了。总体来说 Breakpad 使用起来并不麻烦,崩溃采集的结果也很准确,相信对很多想把产品做好的公司来说是一把利器。本篇仅是简单的讲解了一下 Google Breakpad 的使用以及 dump 解析,如果真正想把这一块做好的话还需要下一点功夫,譬如说崩溃文件压缩上传,以及服务器崩溃日志解析等工作都需要自动化完成,本篇就不再赘述了,如果你有什么好的 idea,欢迎与我交流。...

biyusr的专栏 2272

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

崩溃捕获google_breakpad源码编译及使用

简述: breakpad是一个比Linux core机制更强大的、用于记录程序崩溃时信息的工具。 breakpad是google开发的一个跨平台C/C++ dump捕获开源库和工具套件,可用来发布删除了编译器调试信息的应用程序。在程序崩溃时,将崩溃信息记录在一个小巧的微软minidump格式文件中,支持将其发送回服务器,并且可以从这些minidump和符号文件来生成C和C++堆栈跟踪。breakpad可以在程序崩溃时触发dump写入操作,也可以在没有触发dump时主动写d...

hebbely的博客 1617

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值