在 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
資訊清單。
設定您的版本,納入要執行的測試,以及產生 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