使用breakpad收集native奔溃日志及dump解析

使用breakpad收集native奔溃日志及dump解析

本文是学习使用breakpad的一个总结,在这过程中看了很多博客,但是相对有用的有以下几篇:

  1. Android使用Google Breakpad进行崩溃日志管理
  2. breakpad的正确编译和常规用法
  3. Google Breakpad 学习笔记

环境:win10 linux 子系统,ubuntu 20,android-ndk-r20

一、源码编译

先到github下载google/breakpad的源码,在ubuntu下编译。
总共遇到了三个问题(实际算两个问题),基本没什么大问题即可编译成功。

1.1 文件结尾问题

用windows的git clone代码有这个文件结尾的问题,导致各种失败。直接在ubuntu中clone代码可以避免这种麻烦。

1.2 找不到文件:third_party/lss/linux_syscall_support.h

fatal error: third_party/lss/linux_syscall_support.h: No such file or directory

去这个仓库linux-syscall-support下载并丢到对应目录即可

1.3 "rsp"过时导致失败

下载2这个文件后编译报错:
./src/third_party/lss/linux_syscall_support.h:2146:75: error: listing the stack pointer register ‘rsp’ in a clobber list is deprecated [-Werror=deprecated]
2146 | : “rsp”, “memory”, “r8”, “r10”, “r11”, “rcx”);

根据提示,定位到代码,把"rsp"从列表中删除即可

1.4 编译结果

  1. client: /src/client/linux/libbreakpad_client.a,此文件可以编译进android 的app,完成native crash的捕捉和生成minidump文件;
  2. dump_syms: /src/tools/linux/dump_syms,用于提取so库的sym符号文件;
  3. minidump_stackwalk: /src/processor/minidump_stackwalk,用于将.dmp minudump文件和.sym文件合成可读的堆栈信息;

二、接入breakpad(奔溃收集堆栈信息)

可参考Android使用Google Breakpad进行崩溃日志管理

三、解析dump

linux 环境下进行

3.1 准备工作

将以下文件拷贝到一个目录(如果不拷贝到同一个目录则需要在不同的目录执行):

  1. /src/tools/linux/dump_syms/dump_syms
  2. /src/processor/minidump_stackwalk
  3. 准备带符号表的so(build\intermediates\CXX\debug)
  4. 准备收集到的奔溃堆栈文件(如:fde85952-3123-497b-83708b84-58dd1e16.dmp)

3.2 解析dump

假设so:libbreakpad

# 1.dump_syms 提取特定so库的符号信息
./dump_syms libbreakpad.so > libbreakpad.so.sym
head -n1 libbreakpad.so.sym
# MODULE Linux arm64 659648E1F0DF9DFFD7E92A56FED08B930 libbreakpad.so
# 2.根据上面的生成目录结构,libbreakpad.sym移动到该目录
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值