博客
关于我
记一次收集APP native崩溃信息
阅读量:420 次
发布时间:2019-03-06

本文共 2041 字,大约阅读时间需要 6 分钟。

最近在学习  老师推荐了Breakpad开源库来采集native 的crash1.为什么要使用Google Breakpad?

我们在开发过程中,Android JNI层Crash问题或者我们引用的第三方.so库文件报错,都是一个比较头疼的问题。相对Java层来说,由于c / c ++造成的崩溃没有输出如同Java的异常Strace堆栈信息,所以定位问题也是个比较艰难的事情。

不知道 JNI 的同学可以点击   了解下。

完整的工具集,从Crash的捕获到Crash的dump,都提供了相对应的工具。它记录了崩溃时的.dump文件,无论我们是在本地或者发送到服务器端,都可以用相对应的工具来解析.dump文件帮助我们查找C和C ++堆栈踪迹。

但是,由于Google Breakpad是C / C ++编写的,很多Android开发同学并没有这方面的经验,想用而却不能用。而且,Google Breakpad在Github上面的说明,估计很多人看了就懵逼了:

 
  其实,它的意思是需要去编译Google Breakpad源码去生成适合不同平台下的minidump_stackwalk文件,比如Windows,Mac,Linux等等。当然我也是踩了坑的,参考这个说明,多次尝试后在Windows下确实没有成功过;后​​来,利用VMware Workstation Pro中安装Ubuntu 18.10下成功编出来了。

实践:

首先,按照github工程的ReadMe流程走一遍,碰到了2个提示,让我安装NDK和CMAKE,我根据提示安装后编译直接就成功了;
接着就 run,在手机上跑起来了,点击 CRASH,程序崩溃,我进去 sdcard 中看到了 crashDump 目录
,成功生成了crash 文件。
接着运行: ./tools/mac/minidump_stackwalk crashDump/***.dmp >crashLog.txt ,结果又报错了:
dyld: Symbol not found: __ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE  Referenced from: /Users/james/Documents/projec/breakpad/Chapter01/./tools/mac/minidump_stackwalk  Expected in: /usr/lib/libstdc++.6.dylib in /Users/james/Documents/projec/breakpad/Chapter01/./tools/mac/minidump_stackwalkAbort trap: 6
评论中老师说到缺少必要的动态链接库导致的,建议我们去编译breakpad源码;
我自己从 github 上下载了 breakpad 的源码。但是mac 下编译说报错:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunconfigure:3506: $? = 1

解决办法:安装mac的命令行工具CommandLineTools

xcode-select --install

利用
./configure 
 make
对源码完成了编译,minidump_stackwalk这个文件在src/processor/目录中,然后运行:
./minidump_stackwalk crashDump/***.dmp >crashLog.txt
大功告成,分享下我得成果:
Operating system: Android                  0.0.0 Linux 3.18.31-perf-g4fd2040 #1 SMP PREEMPT Tue Dec 4 03:15:19 WIB 2018 aarch64CPU: arm64     8 CPUsGPU: UNKNOWNCrash reason: SIGSEGV /SEGV_MAPERRCrash address: 0x0Process uptime: not availableThread 0 (crashed) 0 libcrash-lib.so + 0x600     x0 = 0x0000007f7583e300 x1 = 0x0000007ff1b88ad4     x2 = 0x0000007f792e3000 x3 = 0x0000000001e5a140
其实我没有去下载xcode,电脑内存实在是不够,就不想下载了。主要是知道这个过程和原理
 

转载地址:http://rnmuz.baihongyu.com/

你可能感兴趣的文章
发生系统错误 6118
查看>>
阿里巴巴Json工具-Fastjson教程
查看>>
Spring Cloud Gateway - 快速开始
查看>>
Spring Security 实战干货:理解AuthenticationManager
查看>>
Java对象转JSON时如何动态的增删改查属性
查看>>
Python 面向对象进阶
查看>>
Linux常用统计命令之wc
查看>>
Git安装及使用以及连接GitHub方法详解
查看>>
docker容器与虚拟机的区别
查看>>
shell脚本里使用echo输出颜色
查看>>
Python2跟Python3的区别
查看>>
并发编程——IO模型详解
查看>>
Java之封装,继承,多态
查看>>
wait()与notify()
查看>>
使用js打印时去除页眉页脚
查看>>
Spring security OAuth2.0认证授权学习第二天(基础概念-RBAC)
查看>>
ORA-00904: "FILED_TYPE": 标识符无效
查看>>
数据仓库系列之维度建模
查看>>
Scala教程之:函数式的Scala
查看>>
java中DelayQueue的使用
查看>>