本文件涵蓋多個主題,以便協助您開發 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
的偵錯記錄功能,請將 --set-severity core/debug_agent#DEBUG
新增至 fx log
。例如:
fx log --set-severity 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
:
執行偵錯工具,並附加要偵錯的「待偵錯」
debug_agent
:ffx debug connect
在 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 例項。