Google Breakpad是Google开发的一个跨平台异常捕获和dump文件生成的开发库。利用这个库可以在Windows, Mac, Linux, iOS, Android平台上对C/C++程序异常崩溃进行捕获,并生成dump文件供后期调试。
breakpad包含三个模块
- client
client用户手机崩溃的时候,client收集信息写入特定格式的崩溃信息 - dump_syms
dump_syms用于从strip前的so库抽取出调试符号保存到syms符号文件中 - minidump_stackwalk
利用minidump_stackwalk,从syms符号文件和包含崩溃信息的dmp文件提取出完整的崩溃调用堆栈
breakpad使用
编译
1、获取breakpad源码
git clone https://github.com/google/breakpad.git
2、 进入到Breakpad的下载目录,创建mac目录
3、指定编译目录(-prefix 需要指定绝对路径),开始编译
*** 换成自己的绝对路径
./configure -prefix=***/breakpad/mac/
make
4、编译完成后,可以在mac目录下看到编译后的产物,
minidump_stackwalk 文件,用来根据 minidump 文件生成堆栈跟踪log
zm20220906-1542-2.png
libbreakpad.a文件,可以直接集成在client里面
Screenshot2022_09_06_162915.jpg
dump_syms工具在src/tools下面, mac平台需要xcode工程打开对应目录工程编译
最新代码可能编译不通过,可参考:
https://groups.google.com/g/google-breakpad-discuss/c/fierVnIAv1M
- 在linux平台编译生成的dump_syms 仅能在linux平台运行 ,解析 linux上运行的so符号信息
- 在mac平台编译生成的dump_syms 仅能在mac平台运行 ,解析mac上运行的so符号信息
- 在windows平台编译生成的dump_syms 仅能在windows平台运行 ,解析windows上运行的so符号信息
故如果是调试Android设备,需要在linux设备上编译dump_syms
如果使用mac上编译的dump_syms提取android native的so 会出现以下提示
file is neither a fat binary file nor a Mach-O object file
在mac上执行 linux编译的dump_syms提取android native的so 会出现以下提示
zsh: exec format error: dump_syms
使用方法一
- 使用dump_syms生成符号表: ./dump_syms ~/Test/Caputre > Capture.syms
- 创建symbol files专有目录结构:
head -n1 Capture.syms //查看层次文件,得到./symbols/PanoramaCapture/3EXXXXX/
mkdir -p ./symbols/PanoramaCapture/3EXXXXXX/ - 将符号文件移动进去 mv Capture.syms ./symbols/PanoramaCapture/3EXXXXX/
- 利用minidump_stackwalk分析dump文件: ./minidump_stackwalk minidump.dmp ./symbols
得到详细的堆栈信息
zm20220906-1650-2.png
使用方法二
在mac上面调试Android native崩溃时,mac无法生成linux的dump_syms
但是minidump_stackwalk提取dump文件的堆栈信息不受影响,故可以采用minidump_stackwalk + add2line结合的方式
- 生成堆栈信息 ./minidump_stackwalk minidump.dmp > stack.txt
得到以下信息
zm20220906-1718-2.png
- 使用add2line 生成对应类、函数位置
aarch64-linux-android-addr2line -C -f -e libtest.so 0x335418
参考链接:
https://wenku.baidu.com/view/02de4975322b3169a45177232f60ddccda38e662.html
网友评论