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
命令。
如需手动将日志处理为符号化格式,请执行以下操作:
启动符号化工具:
ffx debug symbolize
现在,终端会等待输入。
复制包含符号化标记的原始日志。
将其粘贴到
ffx debug symbolize
终端中。该工具以符号化格式输出日志。