本文件涵蓋多個主題,以便協助您開發 zxdb 偵錯工具:
- 執行測試
- 在新建構後重新載入
debug_agent.cm
- 在
debug_agent
中啟用偵錯記錄功能 - 在 zxdb 中啟用偵錯記錄功能
- 在其他偵錯工具中啟動 zxdb
- 對另一個
debug_agent
中的debug_agent
偵錯
執行測試
若要執行 zxdb 前端測試:
fx test zxdb_tests
如何執行 debug_agent
測試:
fx test debug_agent_unit_tests
fx test debug_agent_integration_tests
如何執行端對端測試:
fx test --e2e zxdb_e2e_tests
建立新建構作業後重新載入 debug_agent.cm
由於 debug_agent_launcher
是一個長時間執行的程序,系統
未嘗試在第一個 ffx debug connect
之後更新 debug_agent
套件
呼叫。
如何強制系統卸載 debug_agent.cm
:
ffx component stop /core/debug_agent
在「debug_agent
」中啟用偵錯記錄功能
如要啟用 debug_agent
的偵錯記錄功能,請新增
--select core/debug_agent#DEBUG
到 fx log
。例如:
fx log --select core/debug_agent#DEBUG --tag debug_agent --hide_metadata --pretty
在 zxdb 中啟用偵錯記錄功能
如何在 zxdb 中啟用偵錯記錄功能:
ffx debug connect -- --debug-mode
在其他偵錯工具中啟動 zxdb
您可以讓 ffx debug
在其他偵錯工具 (例如 lldb
) 中啟動 zxdb。例如:
ffx debug connect --debugger lldb
這個指令可提供 lldb 殼層,您可以使用 run
啟動 zxdb。
您也可以指定其他偵錯工具,例如 gdb
,而不指定 lldb
。
不過,如果您使用 gdb
,可能會遇到下列問題:
- 舊版
gdb
可能不支援所有 DWARF 5 標準。這可能會 因此缺少來源檔案清單等資訊。 Ctrl-C
不會從 zxdb 歸還至gdb
。停止 zxdb 終端機執行:pkill -INT zxdb`
對另一個 debug_agent
中的 debug_agent
進行偵錯
您可以將 debug_agent
附加至其他 debug_agent
:
執行附加至「to-be-debugged」偵錯工具
debug_agent
你 想要偵錯:ffx debug connect
從 zxdb 控制台執行:
[zxdb] attach debug_agent
您應該會看到類似下方的輸出內容:
Waiting for process matching "debug_agent". Type "filter" to see the current filters. Attached Process 1 state=Running koid=345223 name=debug_agent.cm Attached Process 2 state=Running koid=345403 name=/pkg/bin/debug_agent
第一個
debug_agent
會擷取啟動器和本身。您可以將 避免任何死結舉例來說,如要卸離程序 1:
[zxdb] pr 1 detach
舉例來說,若要卸離程序 2:
[zxdb] pr 2 detach
在
$main
函式上建立中斷點:[zxdb] break $main
在另一個終端機中,啟動另一個 zxdb 執行個體:
ffx debug connect
在 zxdb 的初始終端機中,您應該會看到類似下方的輸出內容:
Attached Process 1 state=Running koid=12345 name=/pkg/bin/debug_agent Breakpoint 1 now matching 1 addrs for $main 🛑 process 1 on bp 1 main(int, const char**) • main.cc:101 99 100 int main(int argc, const char* argv[]) { ▶ 101 debug_agent::CommandLineOptions options; 102 cmdline::Status status = ParseCommandLine(argc, argv, &options); 103 if (status.has_error()) {
您現在有兩個執行中的 zxdb 執行個體。