符號化記錄

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

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