android addr2line 定位backtrace的Error行数

sancaiodm Bug异常与ODM定制 2022-12-01 1043 0


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


评论