我的货物测试失败:
$ cargo test
[snip]
Running target/gunzip-c62d8688496249d8
running 2 tests
test test_extract_failure ... FAILED
test test_extract_success ... ok
failures:
---- test_extract_failure stdout ----
task 'test_extract_failure' panicked at 'assertion failed: result.is_err()', /home/dhardy/other/flate2-rs/tests/gunzip.rs:19
failures:
test_extract_failure
test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured
task '<main>' panicked at 'Some tests failed', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libtest/lib.rs:250
如何在像GDB这样的调试器中启动失败的测试?
这应该是一个一般性的问题,但对于那些想要追溯我的步骤,安装最近的每夜 rust 构建和:
git clone https://github.com/dhardy/flate2-rs.git
git checkout 24979640a880
cd flate2-rs
cargo test
2条答案
按热度按时间puruo6ea1#
您可以通过向测试二进制文件传递附加参数来获取它以筛选它运行的测试; Cargo也直接暴露了这个,因此
cargo test test_extract_failure
只会运行那个特定的用例(如果您有其他测试出现异常并且预期会失败,这样它们就不会调用我将要提到的rust_panic
函数,而只会在那里留下令人不快的调用,那么这就很方便了)。为了使用gdb,你需要直接运行测试二进制文件(如果你使用Cargo,它在一个子进程中运行,因此gdb不会捕捉到它内部的异常)。Cargo告诉你文件名
target/gunzip-c62d8688496249d8
。你可以直接用--test
运行它,使之成为一个测试运行:现在把它和gdb连接起来,有一个很方便的函数
rust_panic
,你可以为它插入一个断点,一旦进入gdb,break rust_panic
就意味着在实际展开之前,每当有什么东西触发了恐慌,它就会暂停。以下是一个会话可能会出现的结果:
在该特定情况下,#0-#2和#5-#15是噪声,#3和#4是我们需要的信号。
brgchamk2#
cargo build
现在有一个参数其构建仅具有作为参数提供的测试集的二进制文件。