fidlcat:監控及偵錯通話

總覽

fidlcat 這項工具可讓使用者監控 FIDL 連線。目前, 可在 Fuchsia 裝置上附加或啟動處理程序,並回報其 FIDL 流量

啟用中

fidlcat 工具包含在 SDK 中。在 fuchsia.git 中,會叫用 fx build 將自動建構。

如要執行「fidlcat」,您必須在 Fuchsia 目標中啟用網路。如要啟動 已啟用網路的模擬器。按照操作說明啟動模擬器 可存取 FEMU 的外部網路 頁面

執行

正確設定環境並建立 fidlcat 後 以監控來自目標上處理程序的 FIDL 訊息。另有 你可以採取幾種做法請注意,您必須使用 ffx debug fidl 指令叫用 fidlcat,這樣系統才會自動設定網路通道並找到部分 必要構件 (例如偵錯符號)。

附加至執行中的處理程序

如果您在殼層中執行 ps 指令,可以取得要監控的 Pid。 並執行:

ffx debug fidl --remote-pid <pid>

如果程式碼是由執行元件執行,您可能會想要附加至 執行元件如果是 Dart JIT 執行的程式碼,請在目標上執行 ps,然後找出名為 dart_jit_runner 的程序:

host$ fx shell ps
[...]
        j:21102           17.6M   17.6M
          p:21107         17.6M   17.6M     32k         dart_jit_runner.cm

接著,您可以直接將電子郵件附加到該處理程序,並檢視由 飛鏢計畫:

host$ ffx debug fidl --remote-pid 21107

您可以多次使用 --remote-pid 旗標來連線至多個程序:

ffx debug fidl --remote-pid <pid1> --remote-pid <pid2>

使用 fidlcat 啟動元件

或者,您也可以直接使用元件的網址啟動元件:

ffx debug fidl -- run fuchsia-pkg://fuchsia.com/echo_client_rust#meta/echo_client_rust.cm

您也可以透過 bash 規則運算式指定網址,且該規則運算式與建構的已知專屬網址相符:

ffx debug fidl -- run "echo_client_cpp_synchronous.*"
ffx debug fidl -- run echo_client_cpp.cm

附加至啟動時的程式

您也可以傳送規則運算式到 名稱相符。Fidlcat 會連接至所有目前執行中的檔案, 並啟動符合規則運算式的程式如果發出以下要求: 指令,fidlcat 會連線至系統,並連接到所有 「echo_client」子字串。

ffx debug fidl --remote-name echo_client

混合用途

這三個選項 --remote-pid、--remote-name 和 run 指令。 不過,執行作業一律必須是最後一項。

當 --remote-name 和 run 搭配使用時,只會搭配使用符合 --remote-name 會受到監控。

範例 (echo_server 由 echo_client 啟動):

執行並監控 echo_client。 sh ffx debug fidl -- run echo_client_cpp.cm

執行並監控 echo_client。 sh ffx debug fidl --remote-name echo_client -- run echo_client_cpp.cm

執行 echo_client 並監控 echo_server。 sh ffx debug fidl --remote-name echo_server -- run echo_client_cpp.cm

執行 echo_client 並監控 echo_client 和 echo_server。 sh ffx debug fidl --remote-name echo -- run echo_client_cpp.cm

執行 echo_client 並監控 echo_client 和 echo_server。 sh ffx debug fidl --remote-name echo_client --remote-name echo_server -- run echo_client_cpp.cm

監控服務

如要監控服務,建議您使用 --extra-name,而不是 --remote-name。選項 --extra-name 也會監控某些程序。不過,針對這些程序,監控作業只會啟動 當「--remote-name」中有一個另外,Fidlcat 會在最後 &quot;--remote-name&quot;就會停止 (即使某些「--extra-name」程序仍然受到監控)。

ffx debug fidl --remote-name echo --extra-name archivist -- run echo_client_cpp.cm

輸入選項

您有兩種輸入選項:

  • --from=device 此為預設選項,可即時監控裝置。

  • --from=&lt;path&gt;播放。使用這個選項時,fidlcat 會重播先前儲存的工作階段 --to=&lt;path&gt;(protobuf 格式)。

工作階段儲存

--to=<path> 選項工作階段會儲存到指定的檔案 (二進位 protobuf 格式)。 儲存工作階段後,您可以使用「--from=<path>」重播工作階段。系統會儲存原始資料。 也就是說,顯示的資料與所顯示的資料各自獨立。

格式 (輸出) 選項

您有下列輸出選項:

  • --format=pretty 這是預設輸出。工作階段很清楚地印著 (有顏色)。

  • --format=json 。工作階段會以 JSON 格式列印。

  • --format=textproto 工作階段會以文字 protobuf 格式列印。

  • --format=summary 工作階段結束時,會顯示工作階段的摘要。

  • --format= 標準輸出不會顯示任何內容 (這個選項只有在使用 取代為 --to=<path>)。如果沒有輸出,Fidlcat 可更快完成 ( 來監控即時元件

疑難排解

如果您在執行 ffx debug fidl 時遇到問題,請參閱疑難排解指南 zxdb

fidlcat 工具需要兩個資訊來源才能運作。如果任一者 否則無法將 fidl 訊息解碼:

  • 首先,它需要執行檔的符號。實務上 在樹狀結構內執行時,符號應自動提供給 fidlcat。 或者,您也可以使用 a) .build-id 來提供 --build-id-dir 旗標,b) 使用 --ids-txt 旗標的 ids.txt 檔案,或 c) 使用 --symbol-path 建立任意 ELF 檔案或 ELF 檔案目錄 旗標。這些標記可以合併並多次指定。

  • 第二,它需要對擷取的 FIDL 使用中間表示法,因此 就能產生可讀的輸出內容如果您正在樹狀結構內跑步,則 IR 應該是 自動提供給 fidlcat若非如此,您還可以提供 fidlcat IR 路徑,可以是明確的 IR 檔案路徑,也就是會掃描 IR 的目錄 檔案或包含明確路徑的引數檔案可提供 加上 --fidl-ir-path 旗標,即可 fidlcat 回應。引數檔案必須 在前方加上 @ 字元:--fidl-ir-path @argfile

其他疑慮的開發人員可以提出 錯誤。使用工具>fidlcat 元件。

閱讀指南

fidlcat 指南說明瞭修改 輸出內容同時也提供一些螢幕解讀範例。

程式碼在哪裡?

程式碼位於 //tools/fidlcat