使用 zxdb 调试测试

本页提供了有关使用 Fuchsia 的详细信息和示例 调试程序 (zxdb)。fx test

此外,您也可以参阅教程:使用 zxdb 调试测试 如需详细了解如何在测试中使用 zxdb。

从 fx 测试启动 zxdb 会话

fx test 命令支持 --break-on-failure--breakpoint 标志,可让您使用 zxdb 调试测试。如果您的测试使用 兼容的测试运行程序(即 gTest、gUnit 或 Rust),添加 --break-on-failure 标志会导致测试失败,导致测试执行暂停 并输入 zxdb 调试环境,例如:

fx test --break-on-failure rust_crasher_test.cm

该命令会返回如下输出:

<...fx test startup...>

Running 1 tests

Starting: fuchsia-pkg://fuchsia.com/crasher_test#meta/rust_crasher_test.cm
Command: fx ffx test run --max-severity-logs WARN --break-on-failure fuchsia-pkg://fuchsia.com/crasher_test?hash=1cceb326c127e245f0052367142aee001f82a73c6f33091fe7999d43a94b1b34#meta/rust_crasher_test.cm

Status: [duration: 13.3s]  [tasks: 3 running, 15/18 complete]
  Running 1 tests                      [                                                                                                     ]           0.0%
  👋 zxdb is loading symbols to debug test failure in rust_crasher_test.cm, please wait.
  ⚠️  test failure in rust_crasher_test.cm, type `frame` or `help` to get started.
    84     #[test]
    85     fn test_should_fail() {
  ▶ 86         assert_eq!(0, 1);
    87     }
    88 }
  🛑 process 1 rust_crasher_bin_test::tests::test_should_fail() • main.rs:86
[zxdb]

既然您已经启动了 zxdb 会话,现在就可以使用大部分常规 zxdb 工作流。不过,在此示例中,线程已处于严重崩溃状态 异常,例如 stepnextuntil 等典型的执行命令 不可用。检查命令,例如 printframebacktrace 在调试会话期间可用。

并行执行测试用例

zxdb 旨在处理多进程调试。您可以检查 当前附加的进程及其执行状态(使用 process 名词) 或使用 status 命令创建,当前“有效”进程标记为 “▶”号。

如需了解详情,请参阅互动模型(或 使用 help 命令)。

具体取决于您为 fx test 或测试运行程序提供的选项 默认配置,那么多个测试用例可能会并行失败。支持 所有测试运行程序都会为每个测试用例生成单独的进程,而默认的 配置可能允许在同一时间运行多个测试流程 。

使用 fx test 运行时,zxdb 会附加到您应用中的所有进程 测试领域。测试用例失败只会停止该特定进程。

当且仅当测试用例的数量 等于允许的并行测试用例数。执行任何 进程与 zxdb 分离时,另一个测试用例流程将立即开始。

关闭调试程序

检查完测试失败情况后,您可以通过以下方式恢复测试作业: 与测试流程分离,例如使用 killdetachcontinue

并行执行测试用例,多个 多个测试用例可能会同时失败。如果您没有明确地从 附加进程时,zxdb 仍位于前台。您可以查看所有已附加 使用 process 名词运行这些进程。

您还可以使用某些命令从所有进程中分离(例如, quitdetach *ctrl+d)并继续执行测试套件 。