对日志进行符号化处理

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 终端中。

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