google_breakpad crash检测

内存泄漏检测文章:

mtrace: https://blog.csdn.net/weixin_42887343/article/details/113642463

valgrind: https://blog.csdn.net/weixin_42887343/article/details/113655059

所有工具统计:https://blog.csdn.net/weixin_42887343/article/details/113629076

1 breakpad介绍

google_breakpad是一个由google主导的开源项目,官方介绍为:An open-source multi-platform crash reporting system,即 开源的多平台崩溃上报系统。
这是由google员工在工作中那20%的自由创造时间创造的作品,真正对技术热爱的人才会在自由时间改变世界,只完成工作的人永远只能做一把被人用完就丢的枪。

官方文档介绍:https://github.com/google/breakpad/blob/main/docs/getting_started_with_breakpad.md

2 支持

google breakpad 支持iOS linux windows,但是注意,不支持mingw64。

3 源代码

1 下载
下载地址:https://code.google.com/p/google-breakpad/ 访问不了请挂VPN
github地址:https://github.com/google/breakpad

2 项目源码结构 (主要在src的目录下)

  • build: 编译脚本
  • client: 主要包括捕获以及dump代码
  • common: 通用支持代码
  • google_breakpad: breakpad使用的公共支持代码
  • processor: 崩溃处理核心代码
  • testing: 测试代码
  • third_party: 第三方支持库
  • tools: 一些小工具,用于处理dump文件和符号表

4 编译

4.1、window编译方法

参考链接: https://blog.csdn.net/a844651990/article/details/85316627

4.2、linuxu(buntu桌面)

下载源码后,执行下面命令:

./configure
qmake -j4

4.3、linux(嵌入式arm)

./configure --host=[arm-linux-gnueabihf]
qmake -j4

注: --host 携带参数根据平台使用的交叉编译做修改

5 使用

5.1 加入项目

使用动态库的方式加入项目,以qt为例,需要将编译好的动态库和头文件加入项目文件夹中,然后在项目的pro文件中添加代码,如下图所示:
在这里插入图片描述

5.2 函数调用

//添加头文件
#include "client/linux/handler/exception_handler.h"

//crash回调函数
static bool dumpCallback(const google_breakpad::MinidumpDescriptor &descriptor,
                         void *context,
                         bool succeeded)
{
    Q_UNUSED(context)
    printf("Dump path: %s\n", descriptor.path());
    return succeeded;
}

int main(int argc, char *argv[])
{
    // 加载崩溃信息捕获
    QString curDateTime = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");
    QDir dir(DMP_ROOT + curDateTime);
    if(!dir.exists())
    {
        dir.mkpath(DMP_ROOT + curDateTime);
    }
    google_breakpad::MinidumpDescriptor descriptor(QString(DMP_ROOT + curDateTime).toStdString());
    google_breakpad::ExceptionHandler eh(descriptor,
                                         NULL,
                                         dumpCallback,
                                         NULL,
                                         true,
                                         -1);
	//你的其他代码
    return a.exec();
}

5.3 dmp文件转可读文件

下文仅讲述linux下的操作。

1、使用dump_syms生成符号表:

dump_syms project > project.sym

注: project 为 运行程序

2、创建有层次的调试符号文件夹

  • 查看文件层次
head -n1 project.sym
  • 创建文件夹
mkdir -p ./symbols/project/ 5F5A4C932BFF6581E5AB30B67D9AA5180/ 
  • 将project.sym拷贝到上一步骤文件夹下
cp project.sym symbols/project/ 5F5A4C932BFF6581E5AB30B67D9AA5180/

3、利用minidump_stackwalk分析dump文件

minidump_stackwalk f35daf9d-25a4-4706-d3f62d89-72d1b3c7.dmp ./symbols > result_f35daf9d.log

最终生成的result_f35daf9d.log就是可读文件。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值