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
終端機中。工具會以符號化的格式顯示記錄。