Android NE发生定位辅助之addr2line

当发生NE时,可以通过addr2line来辅助定位发生点。


举个例子

Exception Class: Native (NE)
Exception Type: SIGABRT

Current Executing Process: 
  pid: 3971, tid: 4118
  com.android.nfc

Backtrace: 
    #00 pc 000000000006d658  /system/lib64/libc.so (tgkill+8)
    #01 pc 000000000006aa78  /system/lib64/libc.so (pthread_kill+64)
    #02 pc 000000000002409c  /system/lib64/libc.so (raise+24)
    #03 pc 000000000001c8bc  /system/lib64/libc.so (abort+52)
    #04 pc 000000000001ea88  /system/lib64/libnfc_nci_jni.so
    #05 pc 00000000000db890  /system/lib64/libart.so (art_quick_generic_jni_trampoline+144)
    #06 pc 00000000000d22b4  /system/lib64/libart.so (art_quick_invoke_stub+580)
    #07 pc 00000000000def7c  /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+208)
    #08 pc 000000000028e2cc  /system/lib64/libart.so (_ZN3art11interpreter34ArtInterpreterToCompiledCodeBridgeEPNS_6ThreadEPNS_9ArtMethodEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+312)
    #09 pc 00000000002872b8  /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+596)
    #10 pc 0000000000557fac  /system/lib64/libart.so (MterpInvokeInterface+1188)
    #11 pc 00000000000c4e94  /system/lib64/libart.so (ExecuteMterpImpl+14740)

$** *** *** *** *** *** *** *** Exception *** *** *** *** *** *** *** **$

Android工程源码prebuilt目录下有很多addr2line指令,使用其中一个即可。

user@swd3:/local/sdb/xxx/out/target/product/elsa6p/symbols$ find . -name libnfc_nci_jni.so
./system/lib64/libnfc_nci_jni.so
user@swd3:/local/sdb/xxx/out/target/product/elsa6p/symbols$ 
user@swd3:/local/sdb/xxx/out/target/product/elsa6p/symbols$ ../../../../../prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.1
x86_64-linux-glibc2.11-4.8/ x86_64-linux-glibc2.15-4.8/ 
user@swd3:/local/sdb/xxx/out/target/product/elsa6p/symbols$ ../../../../../prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/bin/x86_64-linux-addr2line -e ./system/lib64/libnfc_nci_jni.so 000000000001ea88
/proc/self/cwd/packages/apps/Nfc/nci/jni/NativeNfcManager.cpp:4152

注:

这里对应的so库一定得是同份代码编出的symbols目录下的,否则及时得到行数也是无效的。


对应的代码段

Code No.1



以上方法是JAVA层代码主动调用的,详见下方代码。

Code No.2


再看看watchdog的代码

Code No.3



由上面可知,WatchDog是个单独的线程,它会阻塞timeout时长,如果在timeout内未执行calcel()方法,将会按照顺序执行doAbort()方法,即发生此NE。

换据话说,以上Code No.2中try-catch内部如若在timeout时长内未执行完毕,则发生以上NE。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值