android addr2line 定位backtrace的Error行数
backtrace需要借助Android ndk提供的addr2line工具来分析,addr2line在android源码中是有自带集成
addr2line路径进入android源码目录的prebuilts目录下执行: find . -name *addr2line
你自己随便找一个可用的addr2line使用,
指令 aarch64-linux-android-addr2line -e xxx\xx.so 123456789abcd
其中xxx是so文件具体路径
xx.so文件在out目录下寻找,find -name "xx.so"
搜索出来的文件中 带symbols字样的,即symbols目录下的才是我们要找的,
123456789abcd 对应崩溃信息中backtrace中的指向地址
addr2line参数使用
用法:addr2line [选项] [地址]
-a在函数名、文件和行号信息之前,显示地址,以十六进制形式
-b指定目标文件的格式为bfdname
-e指定需要转换地址的可执行文件名
-j给出的地址代表指定section的偏移,而非绝对地址
-f在显示文件名、行号输出信息的同时显示函数名信息
-p使得该函数的输出信息更加人性化,每一个地址的信息占一行
(B)使用方法
-e 后面加上so的文件名
-f 同时输出函数名称
使用示例
//addr2line -e '/out/target/product/k39tv1_bsp_1g/symbols/system/lib/liblog.so' 00005403 -f
__android_log_call_aborter
system/core/liblog/logger_write.cpp:189
//addr2line -e '/code/m896_mt39_Bengal/out/target/product/k39tv1_bsp_1g/symbols/vendor/lib/libmtkcam.featurepipe.streaming.so' 000f0027 -f
vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/streaming/G_P2
addr2line -Cif -e test 0x400afa
FuncBadBoy
/root/prog/src/test2/test.c:36
addr2line -Cif -e test 0x400b0a
FuncBadFather
/root/prog/src/test2/test.c:40
addr2line -Cif -e test 0x400b55
main
/root/prog/src/test2/test.c:50
评论