概述
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中地址反差backtrace。https://mp.csdn.net/postedit/81153086
最后
以上就是拼搏板栗为你收集整理的怎么利用tombstones墓碑文件分析崩溃问题的全部内容,希望文章能够帮你解决怎么利用tombstones墓碑文件分析崩溃问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复