Tombstone 文件分析
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 文件分析相关推荐
- Tombstone原理分析
本文主要围绕三个问题对tombstone进行分析和介绍,debuggerd是如何监控进程并生成tombstone的?tombstone文件中的信息都是什么,是怎么获取的?tombstone文件应该怎么 ...
- 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 使用 addr2line 命令行工具查找动态库中的报错代码位置 )
文章目录 一.从 Tombstone 报错日志中查找报错动态库 二.addr2line 命令行工具使用 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工 ...
- 如何分析tombstone文件
tombstone一般是由Dalvik错误.状态监视调试器.C层代码以及libc的一些问题导致的.当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收 ...
- tombstone问题分析
tombstone文件包含了发生问题的进程ID信息 I/DEBUG ( 241): pid: 244, tid: 244, name: mediaserver >>> /system ...
- addr2line 和 tombstone问题分析
做安卓开发的同学对于tombstone问题应该是很熟悉了,但是对于如何排查和分析值得总结和整理的,这篇文章对入门安卓开发的技术来说是个入门指导,同时对安卓开发的中高级开发也有借鉴. 首先我们来说下什么 ...
- hprof文件分析工具_应用稳定性优化系列(三),资源泄露问题分析及定位
继介绍稳定性ANR类故障和Crash/Tombstone类故障后,本章将介绍第三大类故障资源泄露及其典型场景.分析定位和解决方法. 1 资源泄露问题原因分析 2 典型泄露场景 静态变量长期维持到大 ...
- TombStone文件如何生成
开发者在分析系统稳定性的时候通常需要知道进程发生异常时的调用栈来分析问题,确认发生异常时进程正在做什么.这样才能根据进程所处场景或者调用栈.寄存器信息分析异常发生的原因.而在Android中,当Nat ...
- mytag.class.php,dedetag.class.php文件分析
dedetag.class.php文件分析: ## dede 静态模板类 模板解析过程分析 解析模板的类文件 include/dedetag.class.php 这个文件是dedecms V5.3及之 ...
- win32下PE文件分析之节表
接上一篇的win32下PE文件分析之NT头 (一).FileBuffer与ImageBuffer (1).FileBuffer是将文件原原本本的读入申请的内存区域中,那部分区域就是FileBuffer ...
最新文章
- pvrect r语言 聚类_R语言一条命令实现基于样本和距离的聚类分析
- 并发的发展历史-晶体管和批处理系统
- jMeter 模拟 web 高并发请求
- 项目Beta冲刺(团队7/7)
- 菜鸟对新技术的一点看法
- 关于php编译安装扩展模块memcache的问题
- applicationhostconfig
- 快速理解浮动对标准流的影响
- 获取Activity当前屏幕方向。
- 一个量化交易员的日常:屌丝版VS土豪版
- 矩阵按键值在8位数码管流动显示
- HX710_24位电子秤AD采集
- LAMMPS生成粗糙表面的in文件脚本(可调节微结构高、长和宽)
- 我的HTML学习------表格的基本使用
- 运行错误:view size is not compatible with input tensor‘s size and stride (at least
- python实现图像文件等比例压缩
- 前端练习记录(模仿天猫首页)
- HashMap概述与用法总结
- 驾驶证识别/驾驶证OCR详解
- 如何提高百度云的下载速度