开发

通过 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,从在设备上运行的应用中收集 Meta Quest 日志,以及查看在未使用 Logcat 时发生崩溃所产生的日志。

基本用法

若要使用 Logcat,请启动操作系统 Shell,通过 USB 或 Wi-Fi 建立与 Meta Quest 设备的 Android Debug Bridge (ADB) 连接,然后输入以下命令:
adb logcat
如果已连接并检测到设备,输出日志会立即开始显示到 Shell。在大多数情况下,这种原始输出过于冗长,没什么用处。Logcat 支持按标签筛选,因此可解决这个问题。若只想看到特定标签,请使用:
adb logcat -s <tag>
以下示例只会显示带有 VrApi 标签、XrPerformanceManager 标签以及带有其中任一标签的输出:
adb logcat -s VrApi
adb logcat -s XrPerformanceManager
adb logcat -s VrApi,XrPerformanceManager
请注意,Logcat 会保留最近输出的缓冲区,这些内容会在运行时立即打印出来。若要清除 Logcat 缓冲区中的所有数据,请使用:
adb logcat -c
请注意,这可以链接起来。若要从输入命令的当下开始查看带有 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 VrApiXrPerformanceManager 日志的信息,请参阅 Logcat 统计数据定义

使用 Logcat 确定崩溃原因

应用崩溃时,Logcat 未必正在运行。幸运的是,Logcat 会保留近期输出的缓冲区,而且在很多情况下,在应用崩溃后可以立即向 Logcat 发送命令,来捕捉包含此次崩溃回溯信息的日志:
adb logcat > crash.log
只需发出上述命令,给 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

另请参阅