怎么利用tombstones墓碑文件分析崩溃问题

1、什么是墓碑文件

       Android本机程序本质上是一个Linux程序。当Linux应用程序在执行时发生严重错误,一般会导致程序崩溃。其中,Linux专门提供了一类crash信号,在程序接收到此类信号时,缺省操作是将崩溃的现场信息记录到核心文件,然后终止进程。信号类型参考https://blog.csdn.net/xiongping_/article/details/46858881。  在安卓系统中这类文件就是tombstone文件,存在/data/tombstones路径下。

2、关于地址错误的两个类型,野指针和空指针。

当adress是一个很大的数时一般是野指针的情况,如下面的例子,是释放一个野指针导致的crash。野指针常见的原因1、指针没初始化就使用它指向的地址。2、指针释放后,没有置空,之后又用使用它指向的地址。3、数组越界。

  Build fingerprint: 'nio/airbender/airbender:6.0/MRA58K/15:user/release-keys'

Revision: '0'
ABI: 'arm'
pid: 14360, tid: 15197, name: GLThread 60  >>> com.nextev.home <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'Invalid address 0x57930a60 passed to free: value not allocated'
    r0 00000000  r1 00003b5d  r2 00000006  r3 4c845978
    r4 4c845980  r5 4c845930  r6 0000001e  r7 0000010c
    r8 6de5ca48  r9 40679594  sl 00000001  fp 12d4d8b0
    ip 00000006  sp 4c845368  lr 40643369  pc 4064596c  cpsr 40030010
    d0  0000000000000000  d1  0000000000000000
    d2  0000000000000000  d3  0000000000000000
    d4  00000436c3c80000  d5  4448000043f00000
    d6  000000003f800000  d7  00001800438b0000
    d8  3f00000000000000  d9  400000004169999a
    d10 0000000000000000  d11 0000000000000000
    d12 0000000000000000  d13 0000000000000000
    d14 0000000000000000  d15 0000000000000000
    d16 0000000000000000  d17 0000000000000000
    d18 0000069000000690  d19 400e4c85c0000000
    d20 bfddacd7aeef4ba0  d21 c0004698a0000000
    d22 3ef99342e0ee5069  d23 bfd13c387eebc4b3
    d24 3fc642935dacaf8d  d25 bfa7fa84d5bed5f3
    d26 bfc4e3757245981d  d27 3ec6cd878c3b46a7
    d28 bf29daf063f202af  d29 3fc642935dacaf8d
    d30 3fe98e6c0cb4ea56  d31 bf5695de849fca48
    scr 20000011

backtrace:
    #00 pc 0004296c  /system/lib/libc.so (tgkill+12)
    #01 pc 00040365  /system/lib/libc.so (pthread_kill+32)
    #02 pc 0001ca8f  /system/lib/libc.so (raise+10)
    #03 pc 00019c41  /system/lib/libc.so (__libc_android_abort+34)
    #04 pc 000174e4  /system/lib/libc.so (abort+4)
    #05 pc 0001b6a3  /system/lib/libc.so (__libc_fatal+16)
    #06 pc 00055b83  /system/lib/libc.so (ifree+202)
    #07 pc 00058a67  /system/lib/libc.so (je_free+374)
    #08 pc 0046a570  /system/priv-app/NextevHome/NextevHome.apk (offset 0x11e3000)
    #09 pc 0046a5d0  /system/priv-app/NextevHome/NextevHome.apk (offset 0x11e3000)
    #10 pc 0039365c  /system/priv-app/NextevHome/NextevHome.apk (offset 0x11e3000)
    #11 pc 00177bcc  /system/priv-app/NextevHome/NextevHome.apk (offset 0x11e3000)
    #12 pc 00272840  /system/priv-app/NextevHome/NextevHome.apk (offset 0x11e3000)
    #13 pc 00273238  /system/priv-app/NextevHome/NextevHome.apk (offset 0x11e3000)
    #14 pc 0011be44  /system/priv-app/NextevHome/NextevHome.apk (offset 0x11e3000)
    #15 pc 007df87b  /system/priv-app/NextevHome/oat/arm/NextevHome.odex (offset 0x593000)

 

 

  当adress是一0或者很小的数时,是空指针的问题。如下面的例子。

Build fingerprint: 'nio/airbender/airbender:6.0/MRA58K/165:user/release-keys'
Revision: '0'
ABI: 'arm'
pid: 3422, tid: 6384, name: GLThread 127  >>> com.nextev.home <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
    r0 00000000  r1 00000000  r2 00000000  r3 4d5a02d8
    r4 00000000  r5 00000010  r6 53904194  r7 53904190
    r8 0000019e  r9 4d572000  sl 4d5a0800  fp 4d59fc00
    ip 5bb65000  sp 53904148  lr 6d2bfd17  pc 6d2558bc  cpsr 600f0030
    d0  0000000000000000  d1  0000000000000000
    d2  0000000000000000  d3  3f00000000000000
    d4  3f00000000000000  d5  3f00000000000000
    d6  3c27e549bd314b08  d7  449520003fa8b807
    d8  0000000000000000  d9  0000000000000000
    d10 0000000000000000  d11 0000000000000000
    d12 0000000000000000  d13 0000000000000000
    d14 0000000000000000  d15 0000000000000000
    d16 0000000000000000  d17 0000000000000000
    d18 3fe0000000000000  d19 3a5282e7a7c8eec2
    d20 3fe062cf99fab200  d21 3ef99342e0ee5069
    d22 3ec6cd878c3b46a7  d23 3bb93df2c4dc670f
    d24 3a5282e7a7c8eec2  d25 361d3435e90c01d1
    d26 bfc5555554cbac6e  d27 3ec6cd878c3b46a7
    d28 bf2a00f9e2cae771  d29 bfdffffffd0c5e81
    d30 3fa55553e1053a42  d31 3ef99342e0ee5069
    scr 60000013

backtrace:
    #00 pc 006a48bc  /vendor/lib/libglcore.so
    #01 pc 0070ed13  /vendor/lib/libglcore.so
    #02 pc 004f84c3  /vendor/lib/libglcore.so
    #03 pc 00270d7c  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #04 pc 00435078  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #05 pc 00431364  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #06 pc 00427ac4  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #07 pc 0042b3f0  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #08 pc 00208594  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #09 pc 002085e8  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #10 pc 0011b914  /system/priv-app/NextevHome/NextevHome.apk (offset 0x114f000)
    #11 pc 0080196b  /system/priv-app/NextevHome/oat/arm/NextevHome.odex (offset 0x5b5000)

3、利用addr2line定位问题发生的地点。

纠错知道了错误的原因,代码那么多谁知道到底是哪里指针野了或者空了?这时候在结合backtrace里面的地址通过地址反查,确定问题发生位置。找到位置后再结合错误类型来调查问题。地址反查方法参考我的上一篇文档第二条logcat中地址反差backtracehttps://mp.csdn.net/postedit/81153086

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值