使用addr2line对JNI的Crash堆栈信息分析

目的:使用addr2line对库中的崩溃定位到具体的代码行

步骤:

1.获取崩溃产生的记录堆栈信息的墓碑文件tombstone

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'alps/full_nb6797_6c_m/nb6797_6c_m:6.0/MRA58K/1583238338:user/test-keys'
Revision: '0'
ABI: 'arm'
pid: 19790, tid: 20058, name: (START_ROUTINE)  >>> com.hikvision.voicelib <<<
signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0xf371ae1c
    r0 00000001  r1 e8771a40  r2 7fff485e  r3 7fff485e
    r4 f383c203  r5 de5bf930  r6 eed63dc8  r7 e902e4a0
    r8 f387c898  r9 00000000  sl de57f000  fp de5bf888
    ip de5bea68  sp de5bf7a0  lr f75b6861  pc f371ae1c  cpsr 600f0010
    d0  0000000000000000  d1  6966207369206469
    d2  535b5d7070632e73  d3  6e61725474726168
    d4  726874505b5d7070  d5  727474615f646165
    d6  636174737465735f  d7  30342c657a69736b
    d8  0000000000000000  d9  0000000000000000
    d10 0000000000000000  d11 0000000000000000
    d12 0000000000000000  d13 0000000000000000
    d14 0000000000000000  d15 0000000000000000
    d16 0000000000000000  d17 0000000000000000
    d18 0000000000000000  d19 3ff0000000000000
    d20 40083e0f83e0f83e  d21 0000000000000000
    d22 0000000000000000  d23 0000000000000000
    d24 00000000c7de0000  d25 0000000000000000
    d26 0000000000000000  d27 0000000000000000
    d28 000000000000c7de  d29 0000000000000000
    d30 000000000000c7de  d31 0000000000000000
    scr 20000010

backtrace:
    #00 pc 001d7e1c  /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so (_ZN13C_TransClient17StartTransSessionEv+464)
    #01 pc 001ddd54  /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so (_ZN16C_AudioServerMng17CreateTransClientEv+104)
    #02 pc 001ddc80  /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so (_ZN16C_AudioServerMng22CreateTransClientShellEPv+28)
    #03 pc 001e44c8  /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so
    #04 pc 0004078b  /system/lib/libc.so (_ZL15__pthread_startPv+30)
    #05 pc 0001a031  /system/lib/libc.so (__start_thread+6)

stack:
         de5bf760  00000000
         de5bf764  00000000
         de5bf768  00000000
         de5bf76c  00000000...

2.找到NDK中工具,我的路径是:C:\Users\sylv\AppData\Local\Android\Sdk\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe

3.使用工具分析出现问题的库文件,可从堆栈信息中看到是libaudioaiadapt.so出现了问题,对应的地址为001ddc80,那么输入命令C:\Users\sylv\AppData\Local\Android\Sdk\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe -C -f -e D:\00AndroidStudioProject\SVN\Tool\Viocelib\voicesdk\src\main\jniLibs\armeabi-v7a\libaudioaiadapt.so  001ddc80

对应输出:

 

参数说明:

参数
-a --addresses:在函数名、文件和行号信息之前,显示地址,以十六进制形式。
-b --target=<bfdname>:指定目标文件的格式为bfdname。
-e --exe=<executable>:指定需要转换地址的可执行文件名。
-i --inlines : 如果需要转换的地址是一个内联函数,则输出的信息包括其最近范围内的一个非内联函数的信息。
-j --section=<name>:给出的地址代表指定section的偏移,而非绝对地址。
-p --pretty-print:使得该函数的输出信息更加人性化:每一个地址的信息占一行。
-s --basenames:仅仅显示每个文件名的基址(即不显示文件的具体路径,只显示文件名)。
-f --functions:在显示文件名、行号输出信息的同时显示函数名信息。
-C --demangle[=style]:将低级别的符号名解码为用户级别的名字。
-h --help:输出帮助信息。
-v --version:输出版本号。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值