addr2line工具使用

2,371 阅读2分钟

addr2line工具的作用是将地址转化为对应代码行的工具,有助于定位native层问题。由于最近遇到了相关问题需要使用该工具,所以这里总结一下(仅涉及Linux环境)。

一、工具使用

网上很多旧有资料都是推荐使用Android Studio SDK的 ndk 中或aosp自带的 addr2line 工具。

1.ndk 中的 addr2line(ndk版本23之前):

32位:/Android/Sdk/ndk/版本号/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line

64位: /Android/Sdk/ndk/版本号/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-addr2line

2.AOSP 自带addr2line(仅32位):

./prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-addr2line

image.png

工具的使用方法都是一样的,举例如下:

./prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-addr2line -f -e out/debug/target/product/XXXX/symbols/system/lib/libstagefright.so  0007cd0f 
_ZN7android14MPEG4Extractor10parseChunkEPxi
/home/XXX/source/XXX/LINUX/android/frameworks/av/media/libstagefright/MPEG4Extractor.cpp:2180 (discriminator 1)

二、其他工具

ndk 从版本23之后就移除了 toolchain 目录中的 aarch64-linux-android-4.9 和 arm-linux-androideabi-4.9。如果使用旧版的工具解析新版本目标文件可能会报错。此时可使用下面的替代方案:

1.使用 AOSP 自带的 llvm-addr2line 工具

./prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-addr2line ./prebuilts/clang/host/linux-x86/clang-r450784d/bin/llvm-addr2line

该工具的使用方法与上面的一样:

prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-addr2line -fe '/symbols/system/bin/installd' 00049964
_ZNSt3__15dequeINS_7__stateIcEENS_9allocatorIS2_EEE4backEv
external/libcxx/include/deque:1809

2.使用NDK 中的 llvm-symbolizer

在新版本的 ndk 的路径下也有与 aosp 自带的 llvm-addr2line 同名的工具 /Android/Sdk/ndk/版本/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-addr2line。查看该文件其实是指向同目录名下的另一个文件llvm-symbolizer的链接。所以真正使用的是llvm-symbolizer。

image.png

llvm-symbolizer使用方法参考 adtxl.com/index.php/a…

三、常见问题

1.File format not recognized

工具与目标文件格式(位数)不匹配,使用对应32位/64位的工具解析。

2.aarch64-linux-android-addr2line:未找到命令

将工具路径添加到PATH。

3.aarch64-linux-android-addr2line: Dwarf Error: found dwarf version '5', this reader only handles version 2, 3 and 4 information.

工具不支持目标文件的版本,需要更新工具或降级编译目标文件(一般需要使用其他替代的工具)。

后续遇到其他问题还会继续补充。