当前位置:   article > 正文

Android native crash debug_/apex/com.android.runtime/lib64/libart.so

/apex/com.android.runtime/lib64/libart.so

目录

查看crash信息

 adb logcat

/data/tombstones/

debugger

分析stack信息

addr2line工具

脚本工具stack

参考文档:


查看crash信息

  •  adb logcat

  • /data/tombstones/

adb logcat中的crash信息中会指明tombstones 文件名:

Tombstone written to: /data/tombstones/tombstone_06
  • debugger

tombstone是程序发生crash时打印的stack信息, 如果要实时打印某个进程的stack信息,如果某个时刻程序出现异常尤其是卡死不动的时候, 这个命令会非常有用:

adb shell ps -A |grep surf
system       20225     1 2469536  45520 do_epoll_wait       0 S surfaceflinger

adb shell debuggerd -b  20225

debugger 会打印pid下各个thread的stack信息, 类似于, tombstone文件中也会有类似信息。 

"Signal Catcher" sysTid=2682
    #00 pc 00000000000d11d8  /apex/com.android.runtime/lib64/bionic/libc.so (__rt_sigtimedwait+8) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
    #01 pc 000000000008fc20  /apex/com.android.runtime/lib64/bionic/libc.so (sigwait+68) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
    #02 pc 00000000004d93b8  /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::WaitForSignal(art::Thread*, art::SignalSet&)+392) (BuildId: 8fb5976d4465346647f3e5e5870bdc7a)
    #03 pc 00000000004d8138  /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::Run(void*)+268) (BuildId: 8fb5976d4465346647f3e5e5870bdc7a)
    #04 pc 00000000000e68a0  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
    #05 pc 0000000000084b6c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 21847aa9757f000b0461310a9f5e6e51)

分析stack信息

addr2line工具

 如上stack 信息中其中的#00 pc后面的数字即为错误发生的地址,如00000000000d11d8,那么该地址对应的具体函数的那一行呢?可以使用工具addr2line来分析, 格式如下:

 addr2line -C -f -e  lib.so 地址1 地址2

addr2line在ndk中,可以在google官方下载,一般存储位置为, 注意要解析的lib是64位还是32位, 不同lib使用不同的addr2line。

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

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

如果本地有android 源码, 如64位系统,addr2line在以下地址也可以找到

cd prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin

然后运行命令:

./aarch64-linux-android-addr2line -f -C -e libxxx.so <addr1> <addr2> ...

其中libxxx.so 需要有符号表, 如果是自己编译的系统, 可在以下位置获取:

out/target/product/[productname]/symbols/system/lib/****.so

  • 脚本工具stack

如果有相应的源码文件, 且编译时是unstripped binaries, 将stack 信息粘贴到脚本

development/scripts/stack中, 打印detail行号。

adb pull /data/tombstones/tombstone_06

python stack < tombstone_06

使用lldb调试: 

参考: https://www.jianshu.com/p/3eb6315cb710

https://lldb.llvm.org/use/tutorial.html

参考文档:

使用addr2line,第二个解决更具体: 介绍addr2line调试命令 - Gityuan博客 | 袁辉辉的技术博客

Android Native报错定位(addr2line工具的使用)_SuperDali的博客-CSDN博客_addr2line android

 google: https://source.android.com/devices/tech/debug/index.html

 debuggerd: https://source.android.com/devices/tech/debug/gdb

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40902
推荐阅读
相关标签
  

闽ICP备14008679号