通过 Logcat 收集日志
Logcat 日志记录实用程序是一个命令行工具,包含在
Android SDK 中,用于显示操作系统和应用日志消息。在开发过程中,当应用在设备上运行时,Logcat 对于确定应用以及 Android 操作系统正在执行的操作至关重要。
VrApi 统计数据指南提供了有关 Logcat VrApi 日志解读的详细信息。
Logcat 是
Android 操作系统中的一个命令行工具,可以在应用在 Meta Quest 设备上运行时使用,以显示来自应用和 Android 操作系统的已记录消息。这些消息包括:
- Android 和系统相关消息,例如硬件状态心跳,以及出错时抛出的堆栈跟踪。
- Meta Horizon 操作系统相关消息,例如关于应用启动和停止时间以及 Quest 头戴设备戴上和脱掉时间的日志
- 与当前运行的 Meta Quest 应用相关的消息,例如 CPU 和 GPU 级别的变化以及应用性能信息。应用开发者还可以使用 Android 日志类为应用添加要在 Logcat 中查看的日志。
这些信息可用于识别性能问题所在的区域,并确定崩溃原因。Logcat 还可用于从近期崩溃的应用中检索日志,有可能从中查明原因。
Logcat 的优势包括 Android 开发者对其的熟悉程度、较低的开销以及与引擎无关的特性。虽然只提供基本信息,但作为对 Meta Quest 应用进行一般分析的工具,Logcat 还是很有用的。
以下各节旨在介绍如何设置 Logcat,从在设备上运行的应用中收集 Meta Quest 日志,以及查看在未使用 Logcat 时发生崩溃所产生的日志。
若要使用 Logcat,请启动操作系统 Shell,通过 USB 或 Wi-Fi 建立与 Meta Quest 设备的 Android Debug Bridge (ADB) 连接,然后输入以下命令:
如果已连接并检测到设备,输出日志会立即开始显示到 Shell。在大多数情况下,这种原始输出过于冗长,没什么用处。Logcat 支持按标签筛选,因此可解决这个问题。若只想看到特定标签,请使用:
以下示例只会显示带有 VrApi 标签、XrPerformanceManager 标签以及带有其中任一标签的输出:
adb logcat -s VrApi
adb logcat -s XrPerformanceManager
adb logcat -s VrApi,XrPerformanceManager
请注意,Logcat 会保留最近输出的缓冲区,这些内容会在运行时立即打印出来。若要清除 Logcat 缓冲区中的所有数据,请使用:
请注意,这可以链接起来。若要从输入命令的当下开始查看带有 XrPerformanceManager 标签的全部输出,请使用:
adb logcat -c; adb logcat -s XrPerformanceManager
Logcat 的输出类似于以下示例:
01-19 16:05:56.196 2817 3566 I XrPerformanceManager: perfmgr: SetClockLevels: Apply pending clock request change: 4,3 -> 3,3
这些依次代表:
| 统计数据 | 描述 |
|---|
01-19 16:05:56.196
| 记录此内容的时间戳。请注意,由于 Logcat 会保留之前输出的缓冲区,此时间戳可能来自您开始打印日志之前的时段。 |
2817
| 操作系统分配给生成此日志的进程的编号。 |
3566
| 操作系统分配给生成此日志的线程的编号。 |
I
| 此日志的严重程度。从最低到最高:Verbose(冗长)、Debug(除错)、Info(信息)、Warning(警告)、Error(错误)、Fatal(致命)、Silent(静默)。 |
XrPerformanceManager
| 应用于此日志的标签。 |
SetClockLevels: Apply pending clock request change: 4,3 -> 3,3
| 此日志的正文。 |
应用崩溃时,Logcat 未必正在运行。幸运的是,Logcat 会保留近期输出的缓冲区,而且在很多情况下,在应用崩溃后可以立即向 Logcat 发送命令,来捕捉包含此次崩溃回溯信息的日志:
只需发出上述命令,给 Shell 一点时间,让它将缓冲的输出内容复制到日志文件中,然后结束 ADB(在 Windows 命令提示符或 macOS 终端提示符中使用 Ctrl+C)。然后在日志中搜索“backtrace:”,找到从崩溃开始的堆栈跟踪。
如果已经过去太长时间,日志中却还未显示回溯信息,您可以使用 bugreport 命令来获取 .zip 文件。该文件包含日志、墓碑文件以及有助于分析崩溃原因的其他数据:
adb bugreport outputfile.zip
该文件将放入用户的当前目录中。如果未指定输出文件名称,则使用日期作为文件名。
Logcat 捕捉中的回溯通常会显示发生崩溃的功能,但不会提供行号。若要获得有关崩溃的更多信息,必须安装 Android Native Development Kit (NDK)。安装 NDK 后,即可使用 ndk-stack 实用程序来解析 Logcat 日志状态,获取有关堆栈状态的更多详细信息。若要使用 ndk-stack,请发出以下命令:
ndk-stack -sym <path to symbol file> -dump <source log file> > stack.log
例如,以下命令使用 arm64-v8a 编译版本的符号路径和 crash.log 中的回溯信息,将更详细的堆栈跟踪输出到名为 stack.log 的文件中:
ndk-stack -sym <project-path>/symbols/arm64-v8a -dump crash.log > stack.log