Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Breakpad跨平台crash捕获和生成工具使用

Breakpad跨平台crash捕获和生成工具使用

作者头像
杨永贞
发布于 2022-04-13 02:21:45
发布于 2022-04-13 02:21:45
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

简介

breakpad是一组用于实现崩溃报告系统的客户端和服务器组件。Chromium的Breakpad是目前Native崩溃捕获中最成熟的方案。它是一套完整的工具集,从Crash的捕获到Crash的dump,都提供了相对应的工具。它记录了崩溃时的.dump文件,无论我们是在本地或者发送到服务器端,都可以用相对应的工具来解析.dump文件帮助我们查找C和C++堆栈踪迹。

工作原理:

项目地址

breakpad:GitHub - google/breakpad: Mirror of Google Breakpad project

编译安装

linux平台下

linux的编译安装稍简单些。

LSS:linux-syscall-support: clickhouse submodule sentry-native submodulehttps://chromium.googlesource.com/linux-syscall-support​​​​​​​

1.下载breakpad和LSS源码 2.将LSS中的linux_syscall_support.h移动到breakpad/src/third_party/lss/目录下(没有就自己新建一个) 3.编译,步骤如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd breakpad
./configure
make
sudo make install
# sudo checkinstall

Windows下的安装

​​​​​​​稍麻烦些,推荐使用vcpkg安装。

先cd到vcpkg的安装目录,然后执行下条指令,:x64-windows表示安装win64版本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./vcpkg install breakpad:x64-windows

因为众所周知的原因,下载可能会很慢。不过有大佬给了国内镜像。

详情查看链接链接:https://blog.csdn.net/jackboos/article/details/105026109

使用breakpad

在QT中的测试:

在vcpkg/packages/breakpad_x64-windows中可以找到breakpad的头文件可库。

将breakpad_x64-windows拷贝到项目的同级目录中。

在qt的项目文件.pro中增加以下配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/breakpad_x64-windows/lib/ -llibbreakpad -llibbreakpad_client
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/breakpad_x64-windows/lib/ -llibbreakpad -llibbreakpad_client
else:unix: LIBS += -L$$PWD/breakpad_x64-windows/lib/ -llibbreakpa

INCLUDEPATH += $$PWD/breakpad_x64-windows/include
DEPENDPATH += $$PWD/breakpad_x64-windows/include

接下来一个简单的测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <QCoreApplication>
#include<QDebug>
#include <QDir>
#include "breakpad_x64-windows/include/client/windows/handler/exception_handler.h"

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;
}

// 触发crash来测试
void crash() {
    volatile int* a = (int*)(NULL);
    *a = 1;
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "hello test";
    //获取程序当前运行目录
    QString appDirPath = QCoreApplication::applicationDirPath() + "/crash";

    QDir dir;
    if (!dir.exists(appDirPath)) {
        bool res = dir.mkpath(appDirPath);
        qDebug() << "New mkdir " << appDirPath << " " << res;
    }

    google_breakpad::ExceptionHandler eh(
        L".", NULL, callback, NULL,
        google_breakpad::ExceptionHandler::HANDLER_ALL);


    crash();
    return a.exec();
}

运行起来看到已经生成成功啦,生成了文件3af12e91-8dca-4587-b5f3-d13d5cb3d637.dmp

解析dmp文件

解析文件可以使用minidump_stackwalk,解析的结果存放到test.txt文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./minidump_stackwalk.exe test.dmp >test.txt

minidump_stackwalk.exe工具下载,放在我的资源里了,可以直接下载使用。

引用:

Breakpad使用(window)_narkang的博客-CSDN博客_breakpad

通过vcpkg编译breakpad并在qt项目中应用,VS编译器_沐大人的博客-CSDN博客

https://blog.csdn.net/qq_17766199/article/details/85716750

https://blog.csdn.net/lm111111/article/details/105623432

通过vcpkg编译breakpad并在qt项目中应用,VS编译器_沐大人的博客-CSDN博客

Breakpad(跨平台crash工具)_奇小葩的博客-CSDN博客_breakpad

Google Breakpad:脱离符号的调试工具-电子头条-EEWORLD电子工程世界

Ubuntu搭建breakpad环境及查看dmp文件_Geroff的博客-CSDN博客_breakpad linux

breakpad尝试 - Leehm - 博客园

breakpad的正确编译和常规用法 - 简书

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mac下利用Breakpad的dump文件进行调试
一、前情回顾 最近把公司的一个视频处理程序更新了一个版本,准备提交测试的发现了崩溃的情况。这个程序采用Qt和ffmpeg技术栈开发,主要用于对视频进行渲染拼接处理,在Windows和mac两个平台同时进行发布。在windows上测试完一切正常,然而就在我以为一切大功告成的时候,测试的同事直接给我来了个当头棒喝,程序崩溃了!没有道理啊,同一套代码在Windows上安然无恙,在Mac上为何直接崩溃?好消息是程序在崩溃的时候保存了dump文件。 这得感谢前段时间集成的Google Breakpa
24K纯开源
2018/04/04
5.2K0
mac下利用Breakpad的dump文件进行调试
breakpad: Native crash 日志收集工具前言正题breakpad工作原理项目集成
现在大部分应用都会有Java层的崩溃日志收集机制,一般就是程序crash后,展示一个上报界面,用户点击就上传了。 但是Native程序crash了,很少有做处理的,几个方面原因:
用户2930595
2018/08/23
1.9K0
breakpad: Native crash 日志收集工具前言正题breakpad工作原理项目集成
音视频开发之旅(59)- 捕获收集、定位分析 Native崩溃
我们知道Java崩溃是在Java代码中出现了未捕获异常,导致程序异常退出,常见的异常有:NPE、OOM、ArrayIndexOutOfBoundsException、IllegalStateException、ConcurrentModificationException等等。 还有一类崩溃,也是我们不得不关注,那就是Native层崩溃,这类崩溃不像Java层崩溃那样比较清晰的看出堆栈信息以及具体的崩溃。每当遇到是都要查找分析,写这篇的目的是帮助自己做下记录,也希望能帮到有类似困扰的你,下面我们开始一起学习实践吧。 本文学习实践的demo以张绍文《Android开发高手课》中的例子进行。
音视频开发之旅
2021/11/28
1.3K0
音视频开发之旅(59)- 捕获收集、定位分析 Native崩溃
ctk框架搭建(一) ctk框架插件加载与项目结构
使用CTK框架开发有大半年了,就实际应用上来说框架还比较可靠,但网上资料很少。而刚接触时项目已经有了相当大的体量,与业务等其他逻辑混淆,现在单独把ctk框架部分抽离出来做个总结分享,避免后来的人走弯路。
全栈程序员站长
2022/09/06
1.7K0
Google Breakpad:脱离符号的调试工具
https://jackwish.net/2015/introduction-of-google-breakpad.html
Linux阅码场
2020/02/26
5.1K0
log4cplus最新介绍、详细编译过程及使用(最全面)
log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统,受Apache Software License保护,作者是Tad E. Smith。
杨永贞
2022/09/22
4.6K1
log4cplus最新介绍、详细编译过程及使用(最全面)
如何对CDH集群中的Impala打印线程堆栈
作者简介:黄权隆,Cloudera研发工程师,Apache Impala PMC & Comitter,毕业于北大计算机系网络所数据库实验室,曾就职于Hulu大数据基础架构团队,负责大数据系统的维护和二次开发,主要负责Impala和HBase方向。现就职于Cloudera,专注于Impala开发。
Fayson
2019/11/11
3.2K0
Qt一些模板
总结一下一些用到的模板,后续会有补充。 1. 链接第三方库 ①unix与Windows使用相对路径链接第三方库模板 unix{ contains(QT_ARCH, i386){ LIBS += -L$$PWD/Lib/Qsci/linux_x32/lib -lqscintilla2_qt5 INCLUDEPATH += $$PWD/Lib/Qsci/linux_x32/include } contains(QT_ARCH, x86_64){
用户5908113
2020/05/11
8360
CTK插件框架学习4-创建跨平台插件工程「建议收藏」
在上一篇博客中已经实现了一个简单的插件和测试程序的编写,但是插件跟应用是分开独立的工程。实际应用开发中需要把相关的库和头文件打包到一个工程中,如下图所示,这样比较方便调试开发,也为创建跨平台工程提供了便利。
全栈程序员站长
2022/09/01
1.5K1
CTK插件框架学习4-创建跨平台插件工程「建议收藏」
使用 Google Breakpad 来助力解决程序崩溃
作为一名程序,最头疼的莫过于项目上线后收到程序崩溃的通知,若能够在手头重现出该问题,那相对来说项目能够及时的修复并更新;如果无法重现外网崩溃的问题,那就十分的"头疼"了。要是能够实时的采集到项目的崩溃信息,那该多好啊!这并不是一种什么奢望,目前就有现成的技术解决方案。这段时间,我一直在帮项目开发程序崩溃的采集功能,其中用到的技术方案就是 Google 开发的 Breakpad。
HelloWorld杰少
2022/12/17
2.6K0
使用 Google Breakpad 来助力解决程序崩溃
Qt | windows视频播放器小项目
点击ctrl+r 运行 目前我测试了gif和MP4,其他文件应该也可以,留给大家完成。
Qt历险记
2024/10/28
1230
Qt | windows视频播放器小项目
QT5.14.1调用动态链接库
New -> Application -> Qt Console Application -> Choose
静谧星空TEL
2021/04/27
1.8K0
QT5.14.1调用动态链接库
breakpad概述
根据当前帧的eip(x86)来调用 CodeModules::GetModuleForAddress()返回当前frame所属的模块信息
kinnylee
2020/10/15
1.7K0
breakpad概述
Impala查询卡顿分析案例
作者简介:黄权隆,Cloudera研发工程师,Apache Impala PMC & Comitter,毕业于北大计算机系网络所数据库实验室,曾就职于Hulu大数据基础架构团队,负责大数据系统的维护和二次开发,主要负责Impala和HBase方向。现就职于Cloudera,专注于Impala开发。
Fayson
2019/11/06
3.2K0
Impala查询卡顿分析案例
BreakPad模拟Android native崩溃
Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合。 Breakpad由三个主要组件:
提莫队长
2020/06/02
1.6K0
ctk编译linux,CTK插件框架学习5-插件间通信(Netlink实现热拔插监控)[通俗易懂]
本章来写一个插件,插件功能为通过NETLINK读取linux系统中的hotplug信息,比如usb、SD卡、磁盘等设备的插拔事件产生的信息,将读到的信息通过插件间通信的方式发出。
全栈程序员站长
2022/09/02
1.6K0
你的代码有内存泄漏!
最近在进行词典笔的离线解码器测试,遇到了各种内存泄漏以及崩溃问题,为了协助开发定位问题,用到了Valgrind和BreakPad工具,下面就简单介绍一下这两个小工具吧。
用户5521279
2020/06/04
1K0
gtest单元测试框架介绍及简单使用
Gtest是Google的一个开源框架,它主要用于写单元测试,检查真自己的程序是否符合预期行为。可在多个平台上使用(包括Linux, Mac OS X, Windows, Cygwin和Symbian)。它提供了丰富的断言、致命和非致命失败判断,能进行值参数化测试、类型参数化测试、“死亡测试”。
杨永贞
2022/04/13
4.1K0
gtest单元测试框架介绍及简单使用
vc第三方库辅助管理工具vcpkg的安装使用
安装vcpkg很简单,直接从M$的git仓库:https://github.com/Microsoft/vcpkg.git 拉一下代码,然后编译就行了。
xiny120
2019/06/11
7K0
Qt的简易日志模块封装
C++的下的日志库有很多,如log4cpp、Easylogging++,eplog,g3log,Qt下也有log4qt。
杨永贞
2022/08/11
7960
Qt的简易日志模块封装
推荐阅读
相关推荐
mac下利用Breakpad的dump文件进行调试
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验