Tombstone 文件分析

/*
* 下面信息是dropbox负责添加的
**/
isPrevious: true
Build: Rock/odin/odin:7.1.1/NMF26F/1500868195:user/dev-keys
Hardware: msm8953
Revision: 0
Bootloader: unknown
Radio: unknown
Kernel: Linux version 3.18.31-perf-g34cb3d1 (smartcm@hardcomp5) (gcc version 4.9 20150123 (prerelease) (GCC) ) #1 SMP PREEMPT Mon Jul 24 11:54:35 CST 2017//从这儿开始为tombstone.cpp负责写入tombstone_0* 文件内容
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Rock/odin/odin:7.1.1/NMF26F/1500868195:user/dev-keys'
Revision: '0'
ABI: 'arm'
pid: 13289, tid: 29467, name: CodecLooper  >>> /system/bin/mediaserver <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
...... //由于篇幅较多,省略

tombstone文件在通过Dropbox上传的时候受buff size限制,平常在文件结尾能看到[[TRUNCATED]]关键字,说明文件已经被截断了。完整的文件格式如下:

#分析
##查找对应的symbol
在生成tombstone文件之始,dropbox将生成文件上传时会携带版本等基本信息。一般用Linux version(如:Linux version 3.18.31-perf-g34cb3d1 (smartcm@hardcomp5) (gcc version 4.9 20150123 (prerelease) (GCC) ) #1 SMP PREEMPT Mon Jul 24 11:54:35 CST 2017)去http://172.16.2.18/vmlinux.html上查找与之对应的符号库位置,将backtrace中列出的ELF文件拷贝到本地,以便于解析分析。
##tombstone文件内容

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Rock/odin/odin:7.1.1/NMF26F/1492496606:user/dev-keys'
Revision: '0'
ABI: 'arm64'
pid: 4399, tid: 4399, name: netstat  >>> netstat <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0x0   0000000000000000  x1   0000005555591002  x2   0000000000000007  x3   0000000000000004x4   000000000000004c  x5   0000000000000000  x6   0000007fd1fd44b8  x7   fefefefefefefefex8   0000005555591002  x9   0000007f7ae0c708  x10  000000000000004c  x11  0101010101010101x12  0000007f7ae0c708  x13  000000008000002f  x14  0000007f7b5d7108  x15  0000007f7b5d6dacx16  00000055555aa778  x17  0000007f7b54c89c  x18  00000000ffffffff  x19  0000007f7ae2a340x20  0000007f7ae37400  x21  000000555558d9f5  x22  0000005555591002  x23  00000055555ac760x24  000000555559100b  x25  0000000000000000  x26  ffffffffffffffff  x27  0000000000000000x28  216a8f7c1fbcf681  x29  0000007fd1fd4540  x30  0000005555575b1csp   0000007fd1fd44a0  pc   0000007f7b54c984  pstate 0000000000000000v0   0000007fd1fd44100000007fd1fd44a0  v1   0000007fd1fd44100000007fd1fd44a0v2   ffffff80ffffffc80000007fd1fd43b0  v3   0000007fd1fd43f00000007fd1fd44a0v4   00000000000000000000000000000000  v5   40100401401004014010040140100401v6   00000000000000000000000000000000  v7   00000000000000000000000000000000v8   00000000000000000000000000000000  v9   00000000000000000000000000000000v10  00000000000000000000000000000000  v11  00000000000000000000000000000000v12  00000000000000000000000000000000  v13  00000000000000000000000000000000v14  00000000000000000000000000000000  v15  00000000000000000000000000000000v16  00000000000000000000000000000000  v17  00000000000000000000000000000000v18  00000000000000000000000000000000  v19  00000000000000000000000000000000v20  00000000000000000000000000000000  v21  00000000000000000000000000000000v22  00000000000000000000000000000000  v23  00000000000000000000000000000000v24  00000000000000000000000000000000  v25  00000000000000000000000000000000v26  00000000000000000000000000000000  v27  00000000000000000000000000000000v28  00000000000000000000000000000000  v29  00000000000000000000000000000000v30  00000000000000000000000000000000  v31  00000000000000000000000000000000fpsr 00000000  fpcr 00000000backtrace:#00 pc 000000000001b984  /system/lib64/libc.so (strncmp+232)#01 pc 0000000000020b18  /system/bin/toybox#02 pc 000000000000c58c  /system/bin/toybox#03 pc 000000000000c678  /system/bin/toybox#04 pc 000000000000c5e4  /system/bin/toybox#05 pc 0000000000020108  /system/bin/toybox#06 pc 0000000000011880  /system/bin/toybox#07 pc 0000000000011400  /system/bin/toybox#08 pc 00000000000118f4  /system/bin/toybox#09 pc 000000000001a7d8  /system/lib64/libc.so (__libc_init+88)#10 pc 000000000000b6f8  /system/bin/toybox

-确定发生错误的signal
①如上为signal 11,code 为1,fatal addr 为0x0。
使用aarch64-linux-android-addr2line 工具,将对应的backtrace 的pc偏移地址转成跟代码对应的文件名跟行号。在这里有必要提一下,之前一直用aarch64-linux-android-addr2line -fe ./symbols/system/bin/linker 20b18 执行结果为:

$aarch64-linux-android-addr2line -fe system/bin/toybox 20b18
ss_inode
/proc/self/cwd/external/toybox/toys/pending/netstat.c:378

但中间有inline 函数调用,就不知道调用关系了,不久前发现此工具中的参数帮我们解决了此问题。添加-i等参数,完美解决此问题,具体执行如下:

{ qiyunlong@qiyunlong-pc /home/qiyunlong/tmp/7/1 }
$aarch64-linux-android-addr2line -fCpie system/bin/toybox 20b18
ss_inode at /proc/self/cwd/external/toybox/toys/pending/netstat.c:378(inlined by) scan_pid_inodes at /proc/self/cwd/external/toybox/toys/pending/netstat.c:428(inlined by) scan_pid at /proc/self/cwd/external/toybox/toys/pending/netstat.c:447(inlined by) scan_pids at /proc/self/cwd/external/toybox/toys/pending/netstat.c:456

②还有比较常见的signal有,signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr ----
此类问题工作获得代码行号阅读代码,此类问题为进程自己进行abort判断退出,比较好分析,一般都会带有终止message。
-阅读相关代码逻辑
-争取复现问题,便于在修改后加以验证
如上是我自己搞清楚来龙去脉的方法。当然,对于tombstone文件,以上只是皮毛,更多高级用法如使用objdump -SD … 得到汇编,通过tombstone文件记录的寄存器,和backtrace下面的stack 压入栈的信息还原调用逻辑,以及通过dump内存和maps信息确定虚拟内存对应的linker 文件。

有不对之处,欢迎抛砖。。。

Tombstone 文件分析相关推荐

  1. Tombstone原理分析

    本文主要围绕三个问题对tombstone进行分析和介绍,debuggerd是如何监控进程并生成tombstone的?tombstone文件中的信息都是什么,是怎么获取的?tombstone文件应该怎么 ...

  2. 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 使用 addr2line 命令行工具查找动态库中的报错代码位置 )

    文章目录 一.从 Tombstone 报错日志中查找报错动态库 二.addr2line 命令行工具使用 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工 ...

  3. 如何分析tombstone文件

    tombstone一般是由Dalvik错误.状态监视调试器.C层代码以及libc的一些问题导致的.当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收 ...

  4. tombstone问题分析

    tombstone文件包含了发生问题的进程ID信息 I/DEBUG ( 241): pid: 244, tid: 244, name: mediaserver >>> /system ...

  5. addr2line 和 tombstone问题分析

    做安卓开发的同学对于tombstone问题应该是很熟悉了,但是对于如何排查和分析值得总结和整理的,这篇文章对入门安卓开发的技术来说是个入门指导,同时对安卓开发的中高级开发也有借鉴. 首先我们来说下什么 ...

  6. hprof文件分析工具_应用稳定性优化系列(三),资源泄露问题分析及定位

    继介绍稳定性ANR类故障和Crash/Tombstone类故障后,本章将介绍第三大类故障资源泄露及其典型场景.分析定位和解决方法. 1  资源泄露问题原因分析 2  典型泄露场景 静态变量长期维持到大 ...

  7. TombStone文件如何生成

    开发者在分析系统稳定性的时候通常需要知道进程发生异常时的调用栈来分析问题,确认发生异常时进程正在做什么.这样才能根据进程所处场景或者调用栈.寄存器信息分析异常发生的原因.而在Android中,当Nat ...

  8. mytag.class.php,dedetag.class.php文件分析

    dedetag.class.php文件分析: ## dede 静态模板类 模板解析过程分析 解析模板的类文件 include/dedetag.class.php 这个文件是dedecms V5.3及之 ...

  9. win32下PE文件分析之节表

    接上一篇的win32下PE文件分析之NT头 (一).FileBuffer与ImageBuffer (1).FileBuffer是将文件原原本本的读入申请的内存区域中,那部分区域就是FileBuffer ...

最新文章

  1. pvrect r语言 聚类_R语言一条命令实现基于样本和距离的聚类分析
  2. 并发的发展历史-晶体管和批处理系统
  3. jMeter 模拟 web 高并发请求
  4. 项目Beta冲刺(团队7/7)
  5. 菜鸟对新技术的一点看法
  6. 关于php编译安装扩展模块memcache的问题
  7. applicationhostconfig
  8. 快速理解浮动对标准流的影响
  9. 获取Activity当前屏幕方向。
  10. 一个量化交易员的日常:屌丝版VS土豪版
  11. 矩阵按键值在8位数码管流动显示
  12. HX710_24位电子秤AD采集
  13. LAMMPS生成粗糙表面的in文件脚本(可调节微结构高、长和宽)
  14. 我的HTML学习------表格的基本使用
  15. 运行错误:view size is not compatible with input tensor‘s size and stride (at least
  16. python实现图像文件等比例压缩
  17. 前端练习记录(模仿天猫首页)
  18. HashMap概述与用法总结
  19. 驾驶证识别/驾驶证OCR详解
  20. 如何提高百度云的下载速度

热门文章

  1. 图片kb太大怎么压缩变小?
  2. X96 Max Plus sd卡 刷Emuelec
  3. “机房环境监控系统”机房安全最重要的一环!
  4. 移植嵌入式linux到arm处理器,移植嵌入式Linux到ARM处理器S3C2410:设备驱动
  5. 2014阿里巴巴校园招聘笔试题(中南站)
  6. 3 Vue面试题2 (WW)
  7. 连续模具制造需要注意什么
  8. 吃透单元测试:Spock单元测试框架的应用与实践
  9. Shell脚本学习指南(二)——查找与替换
  10. 细节决定成败 – 选择传智播客成都java培训