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
终端中。该工具以符号化格式输出日志。