本文介绍Mac上使用Breakpad生成分析崩溃文件
Breakpad简介
Breakpad是谷歌提供的一个跨平台崩溃转储和分析工具集。主要由以下组件构成:
- 客户端,Breakpad以库的形式包含在应用程序中,可以监视当前进程或其他进程的运行状态,在进程崩溃或主动请求时写入minidump中。
- 符号文件生成器,是Breakpad提供的一个程序(tools/dump_syms),读取程序文件中的调试信息,生成符号文件*.sym。
- 分析处理器,也是Breakpad提供的一个程序(tools/minidump_stackwalk),输入dump和对应符号文件,输出进程崩溃时的堆栈信息。
源码下载地址:https://github.com/google/breakpad
感兴趣的可以下载自己编译,这里不再赘述。
生成符号集
调用方法:dump_syms 应用(库)文件 > 符号文件
符号文件后缀名需用.sym
sym文件第一行说明了需要的符合文件目录名,必须按照这个目录存放符号文件,否则下一步分析失败。
dump_syms ../../test/test.app >../../test/test.sym
head -n1 test.sym
MODULE mac x86_64 AA5EBCBRDBJJ3AF5AATY6U1990A1OPCLO Test2
mkdir -p ./symbols/Test2/AA5EBCBRDBJJ3AF5AATY6U1990A1OPCLO
mv test.sym ./symbols/Test2/AA5EBCBRDBJJ3AF5AATY6U1990A1OPCLO
符号文件是纯文本,我们可以直接打开查看,其中每一行一条记录,字段以空格分割。第一个字段表示类型:
MODULE:模块记录
FILE:文件记录
FUNC:函数记录
空:行号记录
详见 https://github.com/google/breakpad/blob/master/docs/symbol_files.md
分析崩溃文件
调用方法:minidump_stackwalk 崩溃文件 符号文件目录
默认输出在控制台,可以添加“ >输出文件”到指定文件中,方便查看
minidump_stackwalk ./test.dmp ./symbols >./test.txt
由于dump存在众多未解析字节,很多情况下无法定位到函数名和具体行号。