Android Tombstone/Crash的log分析和定位(墓碑文件) 您所在的位置:网站首页 越界怎么看 Android Tombstone/Crash的log分析和定位(墓碑文件)

Android Tombstone/Crash的log分析和定位(墓碑文件)

2023-08-17 07:10| 来源: 网络整理| 查看: 265

=====项目中遇到进程挂掉的问题,需要分析Tombstone,本文帮了大忙

http://blog.csdn.net/helldevil/article/details/6682211

 

9楼 adits 2013-04-22 16:20发表 [回复] [引用] [举报]

命令使用有误: 原文: addr2line -e -f libc.so 0001173c 应该是 addr2line -e libc.so -f 0001173c

 

===================================================================================================

有一句话叫做常在河边走,哪有不湿鞋。我们这些研究和开发Android的工程师正应了这句话,相必大家在调试的时候经常会遇到这么个东西吧

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'XXXXXXXXX'pid: 1658, tid: 13086  >>> system_server deassmble_libc.txt 反汇编下你的动态连接库文件,并且将它写入一个文件中。

   打开这个反汇编过后的重定向文件,在查询的时候输入1173c这个偏移地址,你会看到在茫茫人海中

  00011684 :    11684:       e92d4ff0        push    {r4, r5, r6, r7, r8, r9, sl, fp, lr}    11688:       e24dd01c        sub     sp, sp, #28     ; 0x1c    1168c:       e1a06001        mov     r6, r1    11690:       e1a08002        mov     r8, r2    11694:       e1a09003        mov     r9, r3    11698:       e3a04001        mov     r4, #1  ; 0x1    1169c:       e59f521c        ldr     r5, [pc, #540]  ; 118c0    116a0:       e58d000c        str     r0, [sp, #12]    116a4:       eb009a35        bl      37f80    116a8:       e59f2214        ldr     r2, [pc, #532]  ; 118c4    116ac:       e1a03000        mov     r3, r0    116b0:       e1a01004        mov     r1, r4    116b4:       e593c000        ldr     ip, [r3]    116b8:       e3a0003c        mov     r0, #60 ; 0x3c    116bc:       e08f3005        add     r3, pc, r5    116c0:       e7933002        ldr     r3, [r3, r2]    116c4:       e5834000        str     r4, [r3]    116c8:       e58dc010        str     ip, [sp, #16]    116cc:       eb009a3b        bl      37fc0    ...

   1173c:       ebffec2b        bl      c7f0 -->就是他了,对你成功了。

   ...

这个是ARM汇编,需要你翻译成对应的C函数去看,这里我就不做解释了,照着前面的步骤,

对上面中#15-->#00 一共16行慢慢去找,直到找到#00行的问题函数,其实,最后一个#00行的是最重要的(前面不找也行,但是可以多给你提供问题信息,和流程),因为他是第一目击者,也是Crash前的第一现场。所以找到这个函数很重要,假设我们最后经过万里长针发现#00的出错的地方是pXX->member挂了(MD,我经常遇到这种问题)。

那么你可以怀疑两个地方:

1 您的指针是空指针,但是现实与理想总是十万八千里,多数情况下很少出现,而且你分析代码后,也会对自己说怎么可能。绝大多数情况下,从我的经验来讲,很少会有空指针这种低级错误,但是不排除哪个2货出现了这么个问题。如果是这个问题,那么恭喜你,你很幸运。

2 还有就是怀疑越界和内存地址被挤占。就拿我以前的经验,指针不是空,但是根据汇编码看,是访问成员变量挂了,这个地址肯定是被占用了。

   针对第2种比较恶心的情况,就需要你看整个log的流程了,需要你看下主要的mainlog关于出现crash前的动作,看看是哪个孙子占用的,以最近原则为先,从下往上看,唉,说句实在话,李白的一句话可以形容整个过程:"蜀道难,难于上青天啊"。工作量大,而且要细致。我也没什么办法。。。

  还有一种情况,就是内存不够,导致了您的地址被挤占了,出现low memory, no more ...这样的语句,以及大量出现GC_FOR_MALLOC关于GC的东西(如果是少量的,可以忽略,大量的话),呵呵表明你的某个进程在吞噬你的内存,存在内存泄漏。坑爹啊,这个问题,是最难查的,需要你花大量时间,去看内存的变化。一般看内存的情况是

cat /proc/meminfo

空闲内存=buffer+cache+free这三个字段,Active字段是已经使用的内存,Total不用说,是总的物理内存。(记住 free不高,并不代表你的内存空闲不高,海水不可斗量,需要看全了3个字段的总和才是空闲内存)

如果你想具体跟踪每个进程的内存使用情况,还是在/proc下面,对应了N多的数字文件,那个其实是PID号,进去后cat status可以看到

VMRSS XXXKB就是你当前进程的使用内存量,此外还有一些其他的内存数据,包括页啊等等。。。里面还有很多有用的数据,如果你想跟踪所有的进程的内存情况,推介大家可以看看linux ps命令的源码,看看人家是怎么在/proc下遍历进程,并且提取属性值的。

写个daemon,跟踪一段时间,记录下各进程内存的变化,然后就是通宵的分析。。。。

 

总之,这类问题,很难定位,也很难解决,需要花时间,精力去分析。但是如果你解了,那么相信所有人对你会刮目相看的。包括你的老板,量变引起质变,请记住。

 

我还在纠结中啊...分析ing

 

最后再说几句

stack:

#12 476e5eb8  476e5ed8       476e5ebc  476e5ed8       476e5ec0  00100000       476e5ec4  476e5ed8       476e5ec8  acaa4d38       476e5ecc  005ec9b0       476e5ed0  aca4e1a3  /system/lib/libdvm.so     476e5ed4  476e5ed8   #13 476e5ed8  005ec9b0       476e5edc  005ecae8       476e5ee0  476e5f00       476e5ee4  aca4e109  /system/lib/libdvm.so     476e5ee8  005ec9b0       476e5eec  afd11b98  /system/lib/libc.so #14 476e5ef0  476e5f00       476e5ef4  005ecae8       476e5ef8  45b29b84       476e5efc  afd11740  /system/lib/libc.so #15 476e5f00  476e5f00       476e5f04  005ecae8       476e5f08  00000009       476e5f0c  00000000       476e5f10  00000000       476e5f14  005ec9b0       476e5f18  00000000       476e5f1c  00000000  

红色的部分是基地址+偏移地址

比如afd +11740 这个afd你可以从prelink-linux-arm.map找到每个.so的基地址(比如 libc.so                 0xAFD00000 # [~2M])11740可以从反汇编的文件中找到对应点,但是我不知道这些有什么用。  

希望这偏小文章能帮助到大家,大家共同进步,有好的方法也欢迎您一起分享。谢谢!

下面是一个老外的摘录早期存于google论坛的内存分析文章(现在没了),我是在他基础上,又加了一些分析和经验之谈,希望上帝保佑让我早点定位到问题。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有