符號化記錄

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 終端機中。

    這項工具會以符號化格式輸出記錄。