对日志进行符号化处理

robots: noindex

ffx debug symbolize 命令会将日志处理成符号化格式(即人类可读的堆栈轨迹)。

概念

以下示例展示了 Fuchsia 设备中的符号化日志:

$ ffx log --kernel
...
[326.124][klog][klog][I]    #0    0x0000428d2319f74b in abort() ../../zircon/third_party/ulib/musl/src/exit/abort.c:7 <libc.so>+0x6474b sp 0x27c83188f70
[326.124][klog][klog][I]    #1    0x000001cb1faef047 in main() src/hello_world/hello_world.cc:9 <<VMO#113249=blob-30a652b1>>+0x2047 sp 0x27c83188f80
[326.124][klog][klog][I]    #2    0x0000428d2319eef2 in start_main(const start_params*) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:140 <libc.so>+0x63ef2 sp 0x27c83188fa0
[326.124][klog][klog][I]    #3    0x0000428d2319f145 in __libc_start_main(zx_handle_t, int (*)(int, char**, char**)) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:215 <libc.so>+0x64145 sp 0x27c83188ff0
[326.124][klog][klog][I]    #4    0x000001cb1faef011 in _start(zx_handle_t) ../../zircon/system/ulib/c/Scrt1.cc:7 <<VMO#113249=blob-30a652b1>>+0x2011 sp 0x4046d0234fe0
[326.124][klog][klog][I]    #5    0x0000000000000000 is not covered by any module sp 0x4046d0234ff0

借助符号化日志,您可以读取发生错误的源代码(例如 in main() src/hello_world/hello_world.cc:9)的文件名和行号。

默认情况下,当调试符号在您的环境中注册时,ffx log 命令会自动输出符号化日志。(如需关闭此功能,请运行 ffx log -–no-symbols。)ffx debug symbolize 命令(ffx log 在后台使用)将包含符号化标记的日志作为输入,并生成符号化日志作为输出。只要在您的环境中注册了与此类标记对应的调试符号,此流程便可正常运行(请参阅注册调试符号)。

对来自外部来源的日志进行符号化处理

在开发期间,ffx log 会自动处理已注册的调试符号并输出符号化日志,因此您可能永远不需要在自己的环境中手动将日志处理为符号化格式。但在某些情况下,您可以从外部来源(例如 Fuchsia 构建器的输出)获取原始日志的副本。如果您想将此类日志处理为符号化格式,可以将日志作为输入传递给 ffx debug symbolize 命令。

如需手动将日志处理为符号化格式,请执行以下操作:

  1. 启动符号化工具:

    ffx debug symbolize
    

    终端现在会等待输入。

  2. 复制包含符号化标记的原始日志。

  3. 将其粘贴到 ffx debug symbolize 终端中。

    该工具以符号化格式输出日志。