Breakpad使用(window)

Chromium的Breakpad是目前Native崩溃捕获中最成熟的方案,这里参考下Android高手课中的Demo,来学习下怎么使用

1.Chapter01


例子里集成了Breakpad 来获取发生 native crash 时候的系统信息和线程堆栈信息。通过一个简单的 Native 崩溃捕获过程,完成 minidump 文件的生成和解析,在实践中加深对 Breakpad 工作机制的认识。

只是Demo里面提供的minidump_stackwalk可能由于环境不同,无法启动,所以需要单独编译。在网上找到一种不需要编译的情况,这里记录下window情况下的使用。

2.生存崩溃日志


运行的Demo界面

在这里插入图片描述

点击CRASH,授权的情况下,会在SD卡的crashDump目录下生成dmp文件,应用程序会闪退

3.解析dmp文件


解析的文件是minidump_stackwalk,Android Studio的安装目录下bin\lldb\bin就存在这么一个执行文件(我用的是Windows 10),接下来试下,将生成的dmp拷贝到当前目录下,然后执行命令

./minidump_stackwalk.exe test.dmp >test.txt

解析的结果存放到test.txt文件中

在这里插入图片描述
从.dmp文件解析出来的信息,,根据Android 平台 Native 代码的崩溃捕获机制及实现,可以知道Crash reason: SIGSEGV代表那种类型的错误:

SIGSEGV 是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。
Thread 0 (crashed) // crash 发生时候的线程
 0  libcrash-lib.so + 0x5f0 // 发生 crash 的位置和寄存器信息 

4.符号解析


可以使用Android NDK中提供的addr2line来根据地址进行一个符号反解的过程,该工具在Android SDK目录下可以找到。工具链的选择要根据.so的类型来决定,看解析后的文件,有显示CPU信息。下面是NDK 17的工具链目录:

在这里插入图片描述
如果是arm-64位的so,解析是需要使用aarch64-linux-android-4.9下的工具链。
如果是arm-32位的so,解析是需要使用arm-linux-androideabi-4.9下的工具链。
如果是x86-64位的so,解析是需要使用x86_64-4.9下的工具链。
如果是x86-32位的so,解析是需要使用x86-4.9下的工具链。

这里的CUP信息是arm64,所以对应的目录是

在这里插入图片描述

将so文件拷贝到这个目录,so路径是

在这里插入图片描述

执行命令

 ./aarch64-linux-android-addr2line.exe -f -C -e libcrash-lib.so 0x5f0

结果如下

在这里插入图片描述

在这里插入图片描述

可以看到解析的错误信息和代码里面的位置一致。

5.参考


1.https://blog.csdn.net/qq_17766199/article/details/85716750
2.https://github.com/AndroidAdvanceWithGeektime/Chapter01
3.https://www.jianshu.com/p/0bfe7800bdef
4.https://www.jianshu.com/p/1687c92efb89

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值