有关在 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