在 miri 中运行测试

有关在 miri 中运行 Fuchsia 主机端测试的说明。这些示例使用 //src/sys/lib/cm_rust:cm_rust_test($host_toolchain) 目标。

miri 是 Rust 代码的解释器,可用作 在 Rust 代码中查找未定义的行为 (UB),类似于 C 语言环境和 C++,如 UBSan。

前提条件

安装 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

运行 build:

$ 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,然后注释掉以下内容的配置: 供应商 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