Android Native崩溃收集原理及实现
1.概述
C/C++崩溃处理是android开发中相对比较麻烦的地方。目前有商业化的统计sdk可以支持,如bugly。
2.原理
Android系统是基于linux实现的。linux中当产生崩溃时系统会向当前进程中发送一个信号量,表示进程异常。我们可以拦截这个信号量,然后此时保存当前系统镜像,生成dump文件。
并上传到服务器,在后台进行分析。
3.实现
目前比较流行的是google提供的开源框架google-breakpad.这是一个跨平台的c/c++崩溃捕获工具。具体使用步骤如下:
- 编译google-breakpad android部分,生成一个静态库。
- 自己写一个jni库,调用静态库中的方法,传入崩溃文件的保存目录和崩溃回调。
- 在回调中处理崩溃。例如:上传dump文件。
解析流程如下:
- 首先用dump_syms工具根据so文件导出符号表文件。
- 其次用minidump_stackwalk工具针对符号表和dump文件,还原出调用堆栈。
- 用addr2line根据pc指针地址,找到对应的源代码行号。
举例说明:
1.手动制造崩溃,获取崩溃文件:
2. 生成符号表
./dump_syms libnativecrashcapture.so > ./dumpsym/libnativecrashcapture.so.sym
3. 解析dump文件
./minidump_stackwalk_linux c92f2405-e612-4fb8-ad7628be-f13149b9.dmp ./dumpsym/ dumpdetail3.txt
4. 定位崩溃具体位置
4. 参考文献
转载自:https://juejin.cn/post/6944345734388908068