在 miri 中运行 Fuchsia 主机端测试的说明。这些示例使用 //src/sys/lib/cm_rust:cm_rust_test($host_toolchain)
目标。
miri 是 Rust 代码的解释器,您可以将其用作强大的工具来查找 Rust 代码中的未定义行为 (UB),类似于 UBSan 等 C 和 C++ 的排错程序。
前提条件
安装 rustup 并运行 rustup update
。
如果还没有每夜工具链,请添加一个:
$ rustup install nightly
添加 miri 组件:
$ rustup +nightly component add miri
生成 Cargo.toml
运行 cargo miri
需要 crate 的 Cargo.toml
清单。
配置 build,以包含要运行的测试并生成 Cargo.toml 代码:
$ fx set PRODUCT.BOARD --with //src/sys/lib/cm_rust:tests --cargo-toml-gen
运行构建:
$ fx build
将生成的清单链接到源代码库:
$ fx gen-cargo '//src/sys/lib/cm_rust:cm_rust_test_executable(//build/toolchain:host_x64)'
如需了解详情,请参阅 Fuchsia 上的 cargo 文档。
设置 Miri
cargo miri
必须编译一个新的 Rust sysroot,这需要访问未在 Fuchsia 树中供应商提供的外部 crate。
在您的编辑器中打开 src/.cargo/config
,并注释掉 vendoring crate 的配置:
--- a/src/.cargo/config
+++ b/src/.cargo/config
@@ -1,8 +1,8 @@
-[source.crates-io]
-replace-with = "vendored-sources"
+#[source.crates-io]
+#replace-with = "vendored-sources"
-[source.vendored-sources]
-directory = "../third_party/rust_crates/vendor"
+#[source.vendored-sources]
+#directory = "../third_party/rust_crates/vendor"
运行 cargo +nightly miri setup
。
运行 miri
切换到生成的 Cargo.toml
所在的目录:
$ cd src/sys/lib/cm_rust
运行 miri:
$ cargo +nightly miri test