教學課程:使用代理程式偵錯模式偵錯測試

本教學課程說明 fx test代理程式偵錯模式的概念和工作流程,以及與自動化指令碼或 IDE 偵錯工具整合時,如何管理符號載入和中斷點解析。

總覽

代理程式偵錯模式適用於無頭自動化、IDE 整合 (例如 VS Code) 和指令碼。它會以背景伺服器的形式執行 zxdb,在 /tmp/fx-debug-daemon.sock 的 Unix 網域通訊端上公開偵錯轉接程式通訊協定 (DAP) 端點。

如要在這個模式中啟動測試套件,請按照下列步驟操作:

fx test <TEST_SUITE_NAME> --agent-debugging-mode

預設行為:弱式連結

如果您執行 fx test --agent-debugging-mode 時未提供任何中斷點引數,測試架構會「弱式」將 zxdb 附加至目標程序 (使用 attach --weak 指令)。

什麼是弱連結?

弱式附加功能可防止 zxdb 主動查詢模組,並為程序載入符號索引,進而最佳化啟動效能。

  • 延遲載入符號: zxdb 不會在初始附加時載入符號。
  • 解析度限制:由於缺少符號索引,測試開始後透過 DAP UDS 介面動態註冊的任何符號中斷點都會維持「待處理」狀態,無法驗證或解析。file:line
  • 自動解決當機問題:例外狀況或外部事件 (例如 Rust 恐慌或 C++ 判斷提示失敗) 會觸發符號載入。停止後,符號會自動載入,待處理的中斷點也會解析。

解決方法:主動安裝中斷點

如要偵錯通過路徑,或確保中斷點在執行開始「前」處於啟用和已驗證狀態,請在 fx test 指令列中指定中斷點:

fx test <TEST_SUITE_NAME> --agent-debugging-mode --breakpoint <SOURCE_FILE>:<LINE>

運作方式

  1. 如果存在 --breakpoint 選項,fxtest 架構會正常附加 zxdb (省略 --weak 標記)。
  2. 由於附件正常,zxdb 會立即載入目標程序的符號。
  3. zxdb 會在初始化交握期間預先安裝及解決指定的斷點。
  4. 測試執行作業達到中斷點時,偵錯工具會暫停程序,並將含有 "reason": "breakpoint""stopped" 事件傳送至 DAP 用戶端。

使用 fx debug CLI 進行互動式偵錯

執行作業在斷點或例外狀況停止後,您可以使用 fx debug cli 包裝工具,從第二個終端機與偵錯工具互動。

如要連線及擷取目前的偵錯工具狀態,請執行下列操作:

fx debug cli --json '{"command": "get-state"}'

這項工具會傳回 JSON 回應,列出作用中的程序和執行緒:

{
  "success": true,
  "body": {
    "threads": [
      { "id": 1, "name": "initial-thread" }
    ],
    "processes": { "12345": "my_test_binary" }
  }
}

如要擷取特定執行緒的堆疊追蹤,請傳遞 thread_id

fx debug cli --json '{"command": "stackTrace", "thread_id": 1}'

工具會傳回堆疊框架詳細資料:

{
  "success": true,
  "body": {
    "stackFrames": [
      {
        "id": 0,
        "name": "my_test_function",
        "source": {
          "name": "main_test.cc",
          "path": "/src/main_test.cc"
        },
        "line": 42,
        "column": 1
      }
    ],
    "totalFrames": 1
  }
}

診斷檢查完成後,請繼續執行執行緒:

fx debug cli --json '{"command": "continue", "thread_id": 1}'

使用 fx debug cli help 取得可執行的所有指令清單。

另請參閱