我正在编写一个应用程序来捕获墓碑日志。
如何在任何Android设备中获取墓碑日志的默认位置? 即使墓碑日志尚不可用,当发生任何崩溃或其他情况时,它们会存储在哪里? 据我所知,这些日志保存在“/data/tombstones/”中,但此路径是否适用于所有设备? 在代码中,我需要动态地从“adb shell getprop”等读取某些属性吗?
我正在编写一个应用程序来捕获墓碑日志。
如何在任何Android设备中获取墓碑日志的默认位置? 即使墓碑日志尚不可用,当发生任何崩溃或其他情况时,它们会存储在哪里? 据我所知,这些日志保存在“/data/tombstones/”中,但此路径是否适用于所有设备? 在代码中,我需要动态地从“adb shell getprop”等读取某些属性吗?
如果您的设备尚未取得 root 权限,您应该使用 bugreport adb 命令:
adb bugreport ./bugreport.zip
在zip文件中,您将拥有分析所需的一切。
为了解开墓碑:
获取AOSP源代码并按照https://source.android.com/setup/start的说明执行到lunch
命令。
运行以下命令(将tombstone_01替换为相关的文件):
disassemble_tombstone.py ./bugreport/FS/data/tombstones/tombstone_01
在https://source.android.com/devices/tech/debug中有更多工具用于调试bugreport.zip文件。
并不是说这在未来不能改变(当然,作为开源软件,任何供应商都可以选择修改此内容),但墓碑文件是由 debuggerd
在实现了 tombstone.cpp
中的 engrave_tombstone()
函数中编写的(以前是 tombstone.c
):
#define TOMBSTONE_DIR "/data/tombstones"
看起来使用 /data/tombstones
至少可以追溯到 Android 1.6 Donut的debuggerd
。
find . |grep tombs
路径并不是通用的,实际上我很久以前就没有见过这样的路径了。通常当出现墓碑错误时,你会在logcat中得到一行指示日志位置的信息。否则你需要自己查找。
adb bugreport > ./bugreport.txt
的形式。 - Pyr3z