阅读:4848回复:2

addr2line工具的使用快速定位lib库错误

楼主#
更多 发布于:2019-11-27 13:55
有些时候,我们的软件发生了异常,crash提示了信息如下:

图片:lib_error.png





我们可以使用addr2line工具来分析错误。
addr2line工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具,一般我们的编译Linux服务器/usr/bin/下面默认就带了这个工具的。如果没有可以从网上下载编译服务器中。

例如本例子中报错信息如下:

11-26 10:23:47.072 25167 25167 F DEBUG   : backtrace:
11-26 10:23:47.072 25167 25167 F DEBUG   :     #00 pc 0004a154  /system/lib/libc.so (tgkill+12)
11-26 10:23:47.072 25167 25167 F DEBUG   :     #01 pc 000478f3  /system/lib/libc.so (pthread_kill+34)
11-26 10:23:47.072 25167 25167 F DEBUG   :     #02 pc 0001dc15  /system/lib/libc.so (raise+10)
11-26 10:23:47.072 25167 25167 F DEBUG   :     #03 pc 00019761  /system/lib/libc.so (__libc_android_abort+34)
11-26 10:23:47.072 25167 25167 F DEBUG   :     #04 pc 00017348  /system/lib/libc.so (abort+4)
11-26 10:23:47.072 25167 25167 F DEBUG   :     #05 pc 000f2b0f  /system/lib/libstagefright.so
11-26 10:23:47.072 25167 25167 F DEBUG   :     #06 pc 000f283f  /system/lib/libstagefright.so (_ZN7android17FindAVCDimensionsERKNS_2spINS_7ABufferEEEPiS5_S5_S5_+206)

这里说明一下,addr2line工具只能对有符号表的so进行分析定位,我们编译安卓实际使用的是/system/lib目录下的so库都是不带符号表的,这样可以省点image的空间大小。所以我们分析的时候需要进入到安卓编译生成目录,out/target/product/p212/symbols/system/lib/目录下,该目录下的so库都是带符号表的,然后使用下面的命令可以定位:(注意这命令是在编译服务器上面输入的命令,不是在板子上面输入的)
# addr2line -e libstagefright.so 000f2b0f  
/proc/self/cwd/frameworks/av/media/libstagefright/avc_utils.cpp:292

这样就可以定位到具体的行数,去修改错误了,是不是很方便?

最新喜欢:

zhaoyf13zhaoyf...
If you have nothing to lose, then you can do anything.
沙发#
发布于:2019-11-27 14:09
看起来很不错的亚子啊
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
板凳#
发布于:2019-11-28 11:52
sprd  MTK amlogic 好像世野科技 很屌的亚子,有这公司的朋友吗
游客

返回顶部