Android Tombstone 分析

1.什么是tombstone

当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程 号,线程号),死亡的地址(在哪个地址上发生了 Crash),死亡时的现场是什么样的(记录了一系列的堆栈调用信息)等等。 

2.tombstone文件长什么样

一个tombstone文件大概包含以下信息

--------- beginning of crash

F/libc    (  244): invalid address or address of corrupt block 0xb82f54a0 passed to dlfree

I/libc    (  244): debuggerd_signal_handler called: signal=11, fn=0xb6fbdaa1

F/libc    (  244): Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdeadbaad in tid 244 (mediaserver)

I/libc    (  244): exit from debuggerd_signal_handler

W/NativeCrashListener(  916): Couldn't find ProcessRecord for pid 244

I/DEBUG  (  241): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

E/DEBUG  (  241): AM write failure (32 / Broken pipe)

I/DEBUG  (  241): Build fingerprint: XXXXXXXXX

I/DEBUG  (  241): Revision: '0'

I/DEBUG  (  241): ABI: 'arm'

I/DEBUG  (  241): pid: 244, tid: 244, name: mediaserver  >>> /system/bin/mediaserver <<<

I/DEBUG  (  241): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xdeadbaad

I/art    ( 3078): now dumpable=1

I/DEBUG  (  241): Abort message: 'invalid address or address of corrupt block 0xb82f54a0 passed to dlfree'

I/DEBUG  (  241):    r0 00000000  r1 b6f20dec  r2 deadbaad  r3 00000000

I/DEBUG  (  241):    r4 b82f54a0  r5 b6f220f8  r6 00000000  r7 42424242

3、获取手机中的crash日志,需要打开手机的开发者选项权限,以及提交错误报告,打开USB调试、打开错误报告快捷方式、启用WLAN详细日志记录功能

当电脑中没有权限查看文件时,则需要在手机端进行查找crash文件。

4、find过滤包名

1.如果直接用adb logcat抓日志的话,会把系统的一些其他无关紧要的都抓出来,如果只想抓取被测app的日志,那就根据包名过滤

adb logcat | find "com.watchgame.okii" >d:\hello.txt

5、logcat输出日志

1.把日志存入手机sdcard某个目录(前提是这个目录要是存在的)

adb logcat -f /sdcard/yoyo/yoyo.txt

备注:-f 将日志输出到文件 # 作者:上海-悠悠 QQ交流群:330467341

上面这个指令在真机上(未root)是会报错的,提示没操作权限,在模拟器上可以执行

6、结束logcat

1.结束logcat抓包,可以用ctr+c快捷键结束, 这个是通过手工的快捷键操作完成

2.也可以先查询到logcat的pip,再kill掉

adb shell ps | findstr logcat

adb shell kill -9 [logcatpid]

注意:kill操作在模拟器上是可以的,真机上没权限

7、开启log的日志

adb shell am broadcast -a com.mediatek.mtklogger.ADB_CMD -e cmd_name start --ei cmd_target 23

8、将手机中的日志pull到电脑上

adb pull /sdcard/mtklg(开发者存放crash的地址)/d:test(存放的电脑位置)

你可能感兴趣的:(Android Tombstone 分析)