進階主題

熟悉 Fuchsia 偵錯工具 zxdb 的基本功能後,建議您:

偵錯當機傾印檔

Zxdb 支援載入當機報告產生的小型轉儲。

您可以使用 ffx debug core 指令載入當機報告,例如:

ffx debug core <var>crash_dump_file</var>

下載符號

Zxdb 會自動搜尋在 symbol-index 中註冊的伺服器,找出所有本機設定的符號目錄中不存在的符號。您可以執行下列指令,查看符號索引中註冊的符號伺服器完整清單:

ffx debug symbol-index list -a

這會以遞迴方式掃遍並解析全域符號索引中的所有符號索引檔案。詳情請參閱「關於符號設定」一文。

顯示的伺服器可用來下載符號檔案,並以非同步的方式將其載入偵錯工具。對於特別大型的偵錯資訊檔案,您可能會在 zxdb 中看到 sym-stat 的輸出內容,如下所示:

[zxdb] sym-stat
...
    Base: 0xc37e9000
    Build ID: ba17ef8c43bccf5fb6bf84f9a8d83d9cf3be8976 (Downloading...)
    Symbols loaded: No
...

這表示正在下載。檔案下載完成後,zxdb 就會為新下載檔案的符號建立索引,並且可以繼續偵錯。

附加至現有程序

在大多數情況下,除非您將 zxdb 工作流程自動化,否則不應附加至特定程序。如果您使用 zxdb 而不自動化,應該將 zxdb 附加至元件 ID,請參閱執行 zxdb 一節。

您可以依據程序的 koid (核心物件 ID) 附加至大多數執行中的程序。zxdb 提供 ps 指令,以便查看在 Fuchsia 裝置或模擬器上執行的程序。

在嘗試執行 ps 之前,請確認您已將 zxdb 附加至元件,或至少連線至 Fuchsia 裝置:

舉例來說,如要連線至 core/starnix_runner 元件:

ffx component debug core/starnix_runner

連線至偵錯工具後,您可以執行 ps,藉此查看 Fuchsia 裝置或模擬器中所有執行中程序的清單:

[zxdb] ps
 j: 1033 root
   p: 1102 bin/component_manager
   j: 1662
     j: 1811 bootstrap/console fuchsia-boot:///console#meta/console.cm
       p: 1845 console.cm
...
     j: 66524 core/starnix_runner fuchsia-pkg://fuchsia.com/starnix#meta/starnix_runner.cm
▶      p: 66562 starnix_runner.cm
     j: 66763
       j: 66764 core/starnix_runner/kernels:RW3JlbU starnix_kernel#meta/starnix_kernel.cm
         p: 66797 starnix_kernel.cm
         p: 67333 init
     j: 88021
       p: 88084 debug_agent.cm
   j: 4227 zircon-shell
     p: 4608 sh:console

從上方的輸出內容中:

  • j 表示一個「工作」,這是一個程序的容器。
  • p 表示程序。

工作或程序後面的數字就是物件的 KOID。然後,你可以執行以下操作:

附加至特定程序

您可以透過 zxdb 控制台附加至特定程序。舉例來說,如要附加至 KOID 為 66797starnix_kernel.cm 程序:

[zxdb] attach 66797
Attached Process 2 state=Running koid=66797 name=starnix_kernel.cm component=starnix_kernel.cm
Loading 15 modules for starnix_kernel.cm ....
[zxdb]

附加至特定工作中的所有程序

您可以透過 zxdb 控制台,附加至工作中的所有程序。舉例來說,如要附加至 KOID 為 66764 列出的 core/starnix_kernels:RW3JlbU 工作:

[zxdb] attach -j 66764
Waiting for process matching "job 66764".
Type "filter" to see the current filters.
Attached Process 2 state=Running koid=66797 name=starnix_kernel.cm component=starnix_kernel.cm
Attached Process 3 state=Running koid=67333 name=init component=starnix_kernel.cm
Loading 15 modules for starnix_kernel.cm .....Done.
Loading 17 modules for init Done.

附加至工作中的特定程序

您可以在 zxdb 控制台中,附加至工作的特定程序。例如,如要附加至 starnix_kernel.cm 程序 (這是 KOID 為 66764 的工作中的一部分):

[zxdb] attach -j 66764 starnix_kernel.cm
Waiting for process matching "starnix_kernel.cm".
Type "filter" to see the current filters.
Attached Process 2 state=Running koid=66797 name=starnix_kernel.cm component=starnix_kernel.cm
Attached Process 3 state=Running koid=67333 name=init component=starnix_kernel.cm
Loading 15 modules for starnix_kernel.cm .....Done.
Loading 17 modules for init Done.
[zxdb]