在 miri 中執行 Fuchsia 主機端測試的操作說明。範例使用 //src/sys/lib/cm_rust:cm_rust_test($host_toolchain)
目標。
miri 是 Rust 程式碼的解譯器,可做為強大的工具,在 Rust 程式碼中找出未定義的行為 (UB),類似於 C 和 C++ 等 C++ 的消毒器。
必要條件
安裝 rustup 並執行 rustup update
。
新增夜間工具鍊 (如果您還沒有的話):
$ rustup install nightly
新增 miri 元件:
$ rustup +nightly component add miri
產生Cargo.toml
執行 cargo miri
需要您的 Crate 的 Cargo.toml
資訊清單。
將版本設定為包含要執行的測試,並產生 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
,並註解供應商 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