一、背景
最新遇到crash 的问题 ,这里来简单说明怎么使用addr2line 命令来定位问题
首先获取到tombstone log
找到出现的位置如下log
Process Name: 'UNKNOWN'
Thread Name: ''
pid: 3124, tid: 3124 >>> UNKNOWN <<<
killed by pid: 1, comm: UNKNOWN, uid: 0.
signal 15 (SIGTERM), code 0 (?), fault addr --------
r0 fffffffc r1 ffd0e538 r2 00000010 r3 00007b20
r4 00000000 r5 00000008 r6 00000000 r7 0000015a
r8 f2ab269c r9 00000008 10 f2ab2650 fp 00007b20
ip ffd0e4d0 sp ffd0e4c0 lr f2e33339 pc f2e605a0 cpsr 20070010
#00 pc 000485a0 /system/lib/libc.so
#00 pc 000485a0 /system/lib/libc.so
#01 lr 0001b339 /system/lib/libc.so
--- --- ---
[DEBUG] Read self maps instead! map: 0x0
00 pc 000485a0 /system/lib/libc.so (__epoll_pwait+20)
01 pc 0001b337 /system/lib/libc.so (epoll_pwait+38)
--- --- --- ---
从上面我们可以看到出现问题的在libc.so 这个库文件
二、找到对应的库文件
一版系统编译的这些库都会放到
\out\target\product\product_name\system\lib\下面
对应的在out\target\product\product_name\symbols\system\lib\也有一个
我们需要解析是在这个目录下的out\target\product\product_name\symbols\system\lib\的库文件
三、使用addr2line工具分析
这个工具在不同的android 平台上,放置的位置和名称有些区别
anroid 7.0
prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line
prebuilts\gcc\darwin-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line
如:android 8.1 位置如下
prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line
android 9.0 位置在
\prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line
我们今天分析是在8.1上面对应的位置为:
prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line
四、操作步骤
a、我们以andriod 8.1 的为案例:
首先切换到代码的根目录:
如 anroid_home#
b、使用命令定位
使用命令 aarch64-linux-android-addr2line -f -e +库名称 +地址
上面的地址为: 000485a0 000485a0
0001b339 0001b337
c、结果显示
$ ./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e out/target/product/msm8953_64/symbols/system/lib/libc.so 000485a0
__epoll_pwait
/proc/self/cwd/bionic/libc/arch-arm/syscalls/__epoll_pwait.S:16
./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e out/target/product/msm8953_64/symbols/system/lib/libc.so 0001b339
epoll_pwait
bionic/libc/bionic/epoll_pwait.cpp:?
./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e out/target/product/msm8953_64/symbols/system/lib/libc.so 0001b337
epoll_pwait
bionic/libc/bionic/epoll_pwait.cpp:42
五、结果分析
通解析库文件--找源码的位置-分析源码
找出问题的根源。