符號化記錄

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

    工具會以符號化的格式顯示記錄。