本教學課程說明 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>運作方式
- 如果存在
--breakpoint選項,fxtest架構會正常附加zxdb(省略--weak標記)。 - 由於附件正常,
zxdb會立即載入目標程序的符號。 zxdb會在初始化交握期間預先安裝及解決指定的斷點。- 測試執行作業達到中斷點時,偵錯工具會暫停程序,並將含有
"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 取得可執行的所有指令清單。