在breakpad: Native crash 日志收集工具中,详细介绍了breadpad的使用流程,但是在实际操作过程中,发现有如下问题需要解决:
- native的崩溃堆栈和Java层的崩溃堆栈如何对应?在腾讯的bugly上可以看到他们解决了这个问题:
- 符号表需要放到特定的文件结构中才能解析。
针对于问题1,我已经解决,但目前不开源,大家可以去逆向看看腾讯的实现。
针对于问题2,我已经编写shell脚本自动化解决。
github打不开了,直接上源码:
InstallSym.sh
使用:./InstallSym.sh path/of/so_file [/path/of/symbol/]
传递so路径,即可生成对应的符号表,并安装在合适的目录下。
#! /bin/bash
if [ $# -lt 1 ]; then
echo "Usage: $0 /path/of/so_file [/path/of/symbol/]"
exit 0
fi
so_path=$1
symbol_path="symbol"
if [ $# -eq 2 ]; then
symbol_path=$2
fi
echo "start install Symbol:$so_path, symbol:$symbol_path"
so_name=$(basename $1)
#0
if [ ! -d $symbol_path ];then
echo "create dir: ${symbol_path}"
mkdir ${symbol_path}
fi
#1
sub_dir=${symbol_path}/${so_name}
if [ ! -d $sub_dir ];then
echo "create dir: ${sub_dir}"
mkdir ${sub_dir}
fi
#2
echo "dump_syms $so_path > ${so_name}.sym"
dump_syms $so_path > ${so_name}.sym
#3
uid=`head -n 1 ${so_name}.sym | awk '{print $4}'`
echo $uid
sub_dir=${sub_dir}/${uid}
if [ ! -d $sub_dir ];then
echo "create dir: ${sub_dir}"
mkdir ${sub_dir}
fi
#4
mv ${so_name}.sym ${symbol_path}/${so_name}/${uid}
echo "symbol installed!"
网友评论