本文档介绍了各种主题,可帮助您开发和调试 zxdb 调试程序:
- 运行测试
- 在有新 build 后重新加载 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在有新 build 后重新加载 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 shell,您可以使用 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 实例。