addr2line
1. 介绍
Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。
一般适用于 debug 版本或带有 symbol 信息的库。
2. 工具位置
我们下载的 NDK 里面已经默认有了这个工具,对应的路径如下,其中 .. 表示你的 NDK 安装的路径(每个人的可能都不一样)。我这边是直接用EveryThing搜的,很多工具内都包含这个。
Windows:
32位:..\ndk-bundle\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-addr2line.exe
64位:..\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe
Linux:
32位:../android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line
64位:../android-ndk-r16b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-addr2line
当然我们也可以把这个路径配置到环境变量中去。
4. 使用示例(Windows下使用)
G:\AndroidSDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\x86_64-linux-android-addr2line.exe -C -f -e .\libModelAssimpNative.so 000147fa
命令行使用上述命令即可
5. 实际应用
例如出现了如下崩溃:
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4d42d8b4
r0 ead025fc r1 ead025f0 r2 ead025fd r3 4d42d8a4
r4 efba899c r5 ead025fc r6 ead0263c r7 efba8984
r8 ead00000 r9 ead00000 sl ead025fc fp 00000001
ip 00000000 sp ee5ff348 lr 0007ffff pc efb5e15e cpsr 800f0030
backtrace:
#00 pc 0005915e /system/lib/libc.so (arena_dalloc_bin_locked_impl+345)
#01 pc 00058ffd /system/lib/libc.so (je_arena_dalloc_bin_junked_locked+12)
#02 pc 0007ae27 /system/lib/libc.so (je_tcache_bin_flush_small+366)
#03 pc 0007ac5b /system/lib/libc.so (je_tcache_event_hard+58)
#04 pc 0006a505 /system/lib/libc.so (je_malloc+636)
#05 pc 00339c7f /vendor/lib/libstfaceunlock.so
#06 pc 00282064 /vendor/lib/libstfaceunlock.so
#07 pc 001fc094 /vendor/lib/libstfaceunlock.so
#08 pc 002056b0 /vendor/lib/libstfaceunlock.so
#09 pc 002809d8 /vendor/lib/libstfaceunlock.so
#10 pc 00103f58 /vendor/lib/libstfaceunlock.so
#11 pc 00105398 /vendor/lib/libstfaceunlock.so
#12 pc 001062c4 /vendor/lib/libstfaceunlock.so
#13 pc 000a4f14 /vendor/lib/libstfaceunlock.so
#14 pc 0007957c /vendor/lib/libstfaceunlock.so
#15 pc 00023d2c /vendor/lib/libstfaceunlock.so (cv_face_create_tracker+424)
我们就可以把每个段地址翻译成具体的代码:
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4d42d8b4
r0 ead025fc r1 ead025f0 r2 ead025fd r3 4d42d8a4
r4 efba899c r5 ead025fc r6 ead0263c r7 efba8984
r8 ead00000 r9 ead00000 sl ead025fc fp 00000001
ip 00000000 sp ee5ff348 lr 0007ffff pc efb5e15e cpsr 800f0030
backtrace:
#00 pc 0005915e /system/lib/libc.so (arena_dalloc_bin_locked_impl+345)
#01 pc 00058ffd /system/lib/libc.so (je_arena_dalloc_bin_junked_locked+12)
#02 pc 0007ae27 /system/lib/libc.so (je_tcache_bin_flush_small+366)
#03 pc 0007ac5b /system/lib/libc.so (je_tcache_event_hard+58)
#04 pc 0006a505 /system/lib/libc.so (je_malloc+636)
#05 pc 00339c7f /vendor/lib/libstfaceunlock.so --> /usr/local/google/buildbot/src/android/master-ndk/toolchain/gcc/gcc-4.9/libstdc++-v3/libsupc++/new_op.cc:56
#06 pc 00282064 /vendor/lib/libstfaceunlock.so --> google::protobuf::internal::StringTypeHandlerBase::New()
#07 pc 001fc094 /vendor/lib/libstfaceunlock.so --> caffe::LayerParameter::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*)
#08 pc 002056b0 /vendor/lib/libstfaceunlock.so --> caffe::NetParameter::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*)
#09 pc 002809d8 /vendor/lib/libstfaceunlock.so --> google::protobuf::MessageLite::ParseFromCodedStream(google::protobuf::io::CodedInputStream*)
#10 pc 00103f58 /vendor/lib/libstfaceunlock.so --> ReadProtoFromBinaryResource(protector::ModelResource&, google::protobuf::MessageLite*)
#11 pc 00105398 /vendor/lib/libstfaceunlock.so --> protector::CaffeModel::Init(protector::TarModelResource&, std::string const&, protector::NetConfig, bool
#12 pc 001062c4 /vendor/lib/libstfaceunlock.so --> protector::ModelLoader::LoadByName(std::string const&, bool) const
#13 pc 000a4f14 /vendor/lib/libstfaceunlock.so --> stsdk::detection::DetectorHunter::Init(protector::ModelLoader&)
#14 pc 0007957c /vendor/lib/libstfaceunlock.so --> __appProtect_cv_common_detection_hunter_create_start
#15 pc 00023d2c /vendor/lib/libstfaceunlock.so (cv_face_create_tracker+424)
作者:阿飞__
来源:CSDN
原文:https://blog.csdn.net/afei__/article/details/81181827
版权声明:本文为博主原创文章,转载请附上博文链接!