直接上步骤。
1.获取breakpad代码
采用前两个方式获取源代码的,记得要在方式3中获取linux_syscall_support.h文件,建议直接用方式3。
#方式1
git clone https://chromium.googlesource.com/breakpad/breakpad
#方式2
要是git clone超时,但是可以打开https://chromium.googlesource.com/breakpad/breakpad网页,则可以选择master的tgz格式下载。
#方式3
要是前两者都有问题的话,可以用以下分享(目前自己使用的版本,主要是linux_syscall_support.h在CSDN要积分)
此方式,包含了前两者都缺少的一个头文件linux_syscall_support.h,该头文件要放在\src\third_party\lss目录下,其中lss目录要自己建(这里是windows下的显示格式,偷个懒)。
2.编译
进入源代码根目录,我这里,采用的是方式2,然后解压后的目录叫breakpad-master
cd breakpad-master
./configure && make
如果编译时报linux_syscall_support.h未找到,则按方式3下载该文件,然后放到指定的目录下(即\src\third_party\lss目录下),然后重新编译
编译完以后会在生成两个可执行文件,分别是src/processor/minidump_stackwalk和src/tools/linux/dump_syms/dump_syms
3.添加环境变量
打开.bashrc文件
vim ~/.bashrc
在.bashrc文件的末尾添加刚刚生成的文件的路径
export BREAKPAD_HOME=/home/lgf/softwares/breakpad/breakpad-master # 这里需要替换自己的breakpad路径
export PATH=$PATH:${BREAKPAD_HOME}/src/processor:${BREAKPAD_HOME}/src/tools/linux/dump_syms # 此处需要注意的是,路径中不要指定具体执行文件名,否则会报找不到相关命令,例如${BREAKPAD_HOME}/src/tools/linux/dump_syms/dump_syms,这样执行dump_syms命令会找不到
更新环境变量
source ~/.bashrc
4.分析Breakpad捕获到的dmp文件
前提条件,找到dmp文件对应的so库文件,这里假设这两个文件分别是test.so,test.dmp。
4.1 获取symbol文件
dump_syms test.so > test.so.sym
4.2 得到可读的堆栈跟踪文件
minidump_stackwalk test.dmp test.so.sym > crash.log