目录

查看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

参考文档:

使用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

Android native crash debug相关推荐

  1. Android Native crash 处理案例分享

    简介:Android Native crash 处理案例分享 1. 背景 目前 mPaas[1] Android使用Crash SDK对闪退进行的处理,CrashSDK 是 Android 平台上一款 ...

  2. 基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我

    文章目录 一.遇到问题 二.Native日志分析 三.信号量(signal) 和 错误码(code)分析 四.PC指针addr2line定位 4.1 addr2line路径 4.2 so路径 4.3 ...

  3. Android native crash解析

    当某个进程发生crash时会出现下面的错误日志,它可能出现在logcat日志或者/data/tombstones目录下的tombstone文件中 --------- beginning of cras ...

  4. Android Native Crash崩溃及错误原因分析二-实战解决

    一. 简述 之前有一篇文章讲诉了Android实际开发过程中一些崩溃的原因,以及对崩溃类型做了详细的介绍,简单回顾一下:Crash类型:Java和Native,JavaCrash中明显会打印出Andr ...

  5. android native crash的处理机制

    拦截所有信号 Linux信号机制 1.程序奔溃在Unix-like系统中,所有的崩溃都是编程错误或者硬件错误相关的,系统遇到不可恢复的错误时会触发崩溃机制让程序退出,如除零.段地址错误等.异常发生时, ...

  6. android crash分析工具,Android Crash之Native Crash分析

    前言 上一篇给大家介绍了Android Crash中的Java Crash分析,我们可以知道Java Crash一般会弹出提示框告诉我们程序崩溃了,通常使用Crash工具都能够捕获到:本篇博客来谈谈如 ...

  7. Android Native程序crash的一些定位方法简介

    Android Native程序crash的一些定位方法简介 经常,避免不了,我们的代码会崩溃.如果crash在native代码上,Android会和其他Linux一样,生成一份core dump,将 ...

  8. 当Android发生Native Crash时,Coredump能为我们带来什么信息?

    ​更多内核安全.eBPF分析和实践文章,请关注博客和公众号: CSDN博客:内核功守道 公众号: 内核功守道 1.概述 1.1 Coredump形成原因 1.2 Coredump的作用 2.使能Cor ...

  9. Android稳定性系列8 Native crash处理流程

    一 Native Crash 从系统全局来说,Crash分为Framework/App Crash, Native Crash,以及Kernel Crash. 对于framework层或者app层的C ...

  10. android 中断处理流程,Android P的native crash处理流程

    一.概述 Android系统有监控程序异常退出的机制,这便是本文要讲述得debuggerd守护进程.当发生native crash或者主动调用debuggerd时,会输出进程相关的状态信息到文件或者控 ...

最新文章

  1. 从构建分布式秒杀系统聊聊线程池
  2. python毕业设计开题报告-基于Python的教学互动系统的设计与实现开题报告
  3. 210312阶段三通过sqlite3源码安装sqlite3
  4. Java第二次实验报告——Java面向对象程序设计
  5. 深度解析DDD中台和微服务设计
  6. String被设计成不可变和不能被继承的原因
  7. 3d pdf reader android,3D PDF Reader
  8. vs调用matlab功能,vs调用matlab
  9. 2.开发Mip组件的第一个demo(点击关闭按钮,关闭外层dom)
  10. 利用安卓手机的OTG共享有线网络
  11. Spring自带的工具类总结
  12. 最全的 Charles 抓包工具详解
  13. Android 7.0后SettingProvider ContactsProvider TelephonyProvider MediaProvider数据库位置
  14. 江西省吉安市永丰县市政花园(市政服务大楼[厅]) 工程质量及违法违规建筑容积率问题2011年11月简述报告
  15. php怎么将农历转换成公历,php实现公历农历转换
  16. mysql 获取当天0点 和 当天23点59分59秒
  17. latex 中对同一脚注进行引用
  18. python---Web前端HTML(超文本标记语言)
  19. appium远程连接---逍遥模拟器
  20. 关于真空荧光显示屏的·学习记录

热门文章

  1. easyExcel 导出 excel 自定义表头
  2. Kaggle注册及绑定手机号
  3. 计算机里找不到用户文件夹,电脑里没有appdata文件夹,c盘users文件夹可以删除吗...
  4. 部分js文件在360浏览器极速模式下不加载,不执行的原因
  5. C++编程常见问题—error: passing ‘const std::map<>]‘ discards qualifiers
  6. rpm 如何安装mysql_如何使用rpm安装MySQL
  7. swarm主网BZZ挖矿:钱包如何添加BZZ合约?如何查钱包余额?
  8. 山东理工——1019
  9. 论文解读|BMVC 2019 |Fast-SCNN Fast Semantic Segmentation Network
  10. 简单神经网络手算笔记