刷机过程中会碰到很多crash问题,此时安卓会在/data/tombstones目录下保存9个session文件,如下

root@android:/ # find . |grep tombs

./data/tombstones

./data/tombstones/tombstone_00

./data/tombstones/tombstone_01

root@android:/ #

每个tombstone文件里包含如下信息:

Build fingerprint

Crashed process and PIDs

Terminated signal and fault address

CPU registers

Call stack

Stack content of each call

下面讲述怎么使用ndk-stack和addr2line来跟踪tombstone文件里的错误信息:

1、安装NDK,设置环境变量

export ANDROID_NDK_PATH=/home/bytesthink/tools/android-ndk-r8d/

PATH= $ANDROID_NDK_PATH:$PATH

2、执行ndk-stack命令,其中--sym指向AOSP编译目录中符号路径 --dump指向要调试的tombstone文件

bytesthink@ubuntu:~/tools/android-ndk-r8d$ ./ndk-stack -sym ~/myrelease/symbols -dump ~/win/bytesthink/Documents/test/perform_releases/tombstone_01********** Crash dump: **********

Build fingerprint: 'version1239210121'

pid: 19135, tid: 19135, name: erviceinterface >>> com.test.powermeterserver.serviceinterface <<<

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d

Stack frame #00 pc 00072c9a /system/lib/libdvm.so (dvmAbort+170)

Stack frame #01 pc 00050f6b /system/lib/libdvm.so (ScopedCheck::checkInstanceFieldID(_jobject*, _jfieldID*)+379)

Stack frame #02 pc 0005db56 /system/lib/libdvm.so (Check_SetBooleanField(_JNIEnv*, _jobject*, _jfieldID*, unsigned char)+150)

Stack frame #03 pc 00003a93 /system/lib/libmytestt.so (Java_com_test_jni_MyLibWrapper_getMonitorSample+259)

Stack frame #04 pc 0002d850 /system/lib/libdvm.so (dvmPlatformInvoke+80)

Stack frame #05 pc 00085b48 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+648)

Stack frame #06 pc 000505db /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+59)

Stack frame #07 pc 0008b96d /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+317)

Stack frame #08 pc 00170ff1 /system/lib/libdvm.so

Stack frame #09 pc 000402a6 /system/lib/libdvm.so (dvmMterpStd(Thread*)+70)

Stack frame #10 pc 0003dc14 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+212)

Stack frame #11 pc 000b69db /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+2011)

Stack frame #12 pc 000c9f07 /system/lib/libdvm.so (Dalvik_java_lang_reflect_Method_invokeNative(unsigned int const*, JValue*)+295)

Stack frame #13 pc 00170ff1 /system/lib/libdvm.so

Stack frame #14 pc 000402a6 /system/lib/libdvm.so (dvmMterpStd(Thread*)+70)

Stack frame #15 pc 0003dc14 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+212)

Stack frame #16 pc 000b575c /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, char*)+700)

Stack frame #17 pc 00079b8e /system/lib/libdvm.so (CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+78)

Stack frame #18 pc 0005a020 /system/lib/libdvm.so (Check_CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+432)

Stack frame #19 pc 00057c5a /system/lib/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+42)

Stack frame #20 pc 00059351 /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+945)

Stack frame #21 pc 00000fd0 /system/bin/app_process (main+528)

Stack frame #22 pc 0001a579 /system/lib/libc.so (__libc_init+89)

Stack frame #00 pc 0001ca31 /system/lib/libc.so

Stack frame #01 pc 000e66e8 /system/lib/libdvm.so (gcDaemonThread(void*)+216)

Stack frame #02 pc 00097ee0 /system/lib/libdvm.so (internalThreadStart(void*)+528)

Stack frame #03 pc 0000deb8 /system/lib/libc.so (__thread_entry+248)

Stack frame #04 pc 0001c951 /system/lib/libc.so

Stack frame #05 pc 000021e0 /dev/ashmem/dalvik-LinearAlloc (deleted)

Stack frame #06 pc 0000af42 /data/dalvik-cache/system@app@PowerManagementService.apk@classes.dex

Stack frame #00 pc 0001c05b /system/lib/libc.so

Stack frame #01 pc 0009163c /system/lib/libdvm.so (signalCatcherThreadStart(void*)+92)

Stack frame #02 pc 00097ee0 /system/lib/libdvm.so (internalThreadStart(void*)+528)

Stack frame #03 pc 0000deb8 /system/lib/libc.so (__thread_entry+248)

Stack frame #04 pc 0001c951 /system/lib/libc.so

Stack frame #05 pc 00002ff4 /system/lib/libdvm.so

Stack frame #00 pc 0001c317 /system/lib/libc.so

Stack frame #01 pc 000c012b /system/lib/libdvm.so (jdwpThreadStart(void*)+123)

通过上图发现libmytestt.so在PC地址00003a93处崩溃;

3、使用addr2line调试

NDK和Linux上都带有这个工具,路径如下:

i686-linux-android-addr2line

NDK路径:android-ndk-r8d/toolchains/x86-4.6/prebuilt/linux-x86/bin/

可以转换个别名在全局环境中使用

alias addr2line='~/tools/android-ndk-r8d/toolchains/x86-4.6/prebuilt/linux-x86/bin/i686-linux-android-addr2line'

使用命令

bytesthink@ubuntu:~/tools/android-ndk-r8d$ addr2line -f -e ~/myrelease/symbols/system/lib/libmytestt.so 00003a93

Java_com_test_jni_MyLibWrapper_getMonitorSample

.../device/test/PRIVATE/log_infra/myservice/jni/com_test_jni_MyLibWrapper.c:189

android addr2line 用法,分析安卓ANR tombstone使用ndk-stack addr2line相关推荐

  1. android 爬虫 协议分析,安卓逆向:分析抖音登录协议

    新版D音由于插入了过多破坏性代码,已经无法由jadx反编译成功了,太多地方都解析失败.我尝试用MT管理器换引擎反编译,也都是一样的结果.这里如果想分析,需要jadx结合smali代码硬啃.我对着sma ...

  2. android trace文件分析ANR

    为什么80%的码农都做不了架构师?>>>    ANR定义与分类 ANR(Application Not Responding):应用程序无响应,是Android中AMS与WMS监测 ...

  3. [安卓] 14、安卓HTTP——POST和GET用法分析

    内容简介 本文通过建立一个简单的Servlet服务器来分析安卓上用HTTP和服务器通信的细节,旨在演示C/S模式下服务器端和客户端的工作过程. 目录 part.1 用MyEclipse建立一个简单的s ...

  4. Android 性能优化系列:ANR 触发原理与分析

    文章目录 什么是 ANR? ANR 发生场景 系统对 ANR 的捕捉原理 如何分析 ANR traces.txt 信息概览 日志分析思路 ANR 日志准备(traces.txt + mainlog) ...

  5. 免费分享:5本安卓开发经典书籍,Android 7编程入门经典(第4版),Android底层驱动分析和移植,底层驱动分析和移植

    1.Android 7编程入门经典(第4版) 使用Android Studio 2  PDF 下载 下载地址: http://www.askwinds.com/r-c/down-info-02/579 ...

  6. python 安卓app 缺点_用python对android APP进行分析2

    文章接着前一篇文章<用python对android APP进行分析1>的内容 转换其他列数据类型 data.Reviews=data['Reviews'].astype(np.int,in ...

  7. android AsyncTask 的分析与运用

    线程 在Android当中,通常将线程分为两种,一种叫做Main Thread,除了Main Thread之外的线程都可称为Worker Thread. 当一个应用程序运行的时候,Android操作系 ...

  8. Android内存泄漏分析及调试

    2019独角兽企业重金招聘Python工程师标准>>> Android内存泄漏分析及调试 分类: Android2013-10-25 11:31 5290人阅读 评论(5) 收藏 举 ...

  9. Android 系统(177)---Android消息机制分析:Handler、Looper、MessageQueue源码分析

    Android消息机制分析:Handler.Looper.MessageQueue源码分析 1.前言 关于Handler消息机制的博客实际上是非常多的了. 之前也是看别人的博客过来的,但是过了一段时间 ...

  10. Android 系统(74)--Android重启原因分析

    Android重启原因分析 重启原因分类 1.上层造成重启 system_server被杀 watchdog重启 重要线程阻塞 2.kernel造成重启 空指针 非法地址 3.kernel watch ...

最新文章

  1. 剑指offer:构建乘积数组
  2. 敏捷开发签名人建议开发者放弃“敏捷”
  3. C语言的结构使用和结构对齐
  4. ECCV 2020 亮点摘要(上)
  5. FineReport单行与数据库交互的方法
  6. spring(4)面向切面的Spring(AOP)
  7. C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)
  8. 大学计算机基础字母缩写大全,大学计算机基础缩写词.pdf
  9. PTA 硬币找钱问题
  10. python+selenium+scrapy框架爬取斗鱼主播相册内的 图片
  11. 取消pycharm双击shift出现搜索框,但新版找不到ide.suppress.double.click.handler的问题解决
  12. 以铜为镜,正衣冠,以史为镜,明心志,以人为镜,明得失
  13. 如何设置快递送达时短信提醒
  14. 火车售票管理系统 问题陈述和词汇表
  15. linux 路由器都会断流吗,有没有迷你路由器推荐?MTK路由器经常断流..
  16. Jetpack Compose for Desktop: 里程碑1发布
  17. iOS7设置状态栏颜色
  18. Java初级面试笔记
  19. 解决安装出现用户在命令上发出enlas_agreed=1的问题
  20. 关于巨量算数jsvmp简单还原signature思路

热门文章

  1. 25个很酷的jQuery倒计时脚本–添加动态计数器!
  2. axure 调整中继器列宽_Axure中继器:实现“万能”数据表模板的方法
  3. 计算机高级职称答辩ppt,专业技术职务任职资格评审答辩工程系列高级工程师PPT.pptx...
  4. 怎么从抖音上直接跳转到微信呢?
  5. SNPS IP LPDDR4 调试
  6. 智能车学习(十四)——K60单片机GPIO学习
  7. PDF转Word软件
  8. python分解GIF图
  9. 计算机网络-自顶向下方法笔记-滑动窗口协议
  10. C++自动化(模板元)编程基础与应用(4)