用一个小库验证 cargo test:单元测试(同模块树,能测私有函数)、集成测试(tests/ 每文件一个 crate,只能用公开 API,私有函数 E0603)、文档测试;--list、过滤、#[ignore]/--ignored、should_panic;失败退出码 101 与输出;输出捕获与 --nocapture;测试默认并行(最多 4 个同时,0.41 s 对 --test-threads=1 的 0.83 s)。
用一个小库验证文档测试:crate 级、函数级、私有函数的示例都会运行;无标注/should_panic/no_run/ignore/compile_fail 各自的行为与测试名;隐藏行 #;edition 2024 的合并编译;失败时的输出与行号;重命名 API 后引用旧名的 3 个文档测试失败(E0432/E0425)。
用 cargo bench 与自写基准验证基准测试的陷阱:没有 black_box 时 mix(1000) 测得 0.29 ns(计算被删掉),有 black_box 1,719 ns;sum_to 即使有 black_box 也被优化成闭式公式(15 条指令、无循环);5 次运行波动;准备工作计入耗时;稳定版自写基准与 #[bench] 一致。
下载 criterion 0.7 验证:预热 + 100 次采样给出置信区间(mix_1000 为 [1.7172 µs 1.7185 µs 1.7199 µs])与吞吐;离群值报告;不改代码再跑一次竟有 2 个基准被判 regressed(纯噪声),另 2 个 within noise threshold;换成 mix_slow 后四个基准 +3~5%;estimates.json 里的 mean / 置信区间 / 标准差。
用一个故意写得不地道的小库验证 clippy:默认 11 条诊断、9 个 lint(含 eq_op 与 absurd_extreme_comparisons 两个 deny 级别,cargo clippy 退出码 101);-W clippy::pedantic 22 条;#[allow] 与 -D warnings;cargo clippy --fix 改了 7 行并留下 needless_range_loop 与 ptr_arg。
用 rustfmt 1.9 验证代码格式化:--check 退出码 1 并给出 Diff;格式化前后汇编哈希相同(f43810d33a73,语义不变);幂等;max_width = 40 时 12 行对 100 时 5 行;#[rustfmt::skip];稳定版忽略 nightly 才有的配置项并警告。
用 Miri(nightly)检查 unsafe 代码:释放后使用、越界读、未初始化与非法 bool、未对齐引用、Stacked/Tree Borrows 别名违规、数据竞争、内存泄漏,这些在普通运行里多数「正常」退出;Miri 比原生 -O 慢约 33602 倍,且不支持外部 C 函数。
用 nightly 的 -Zsanitizer 验证:ASan 在原生速度上报告释放后使用、堆/栈越界、重复释放、泄漏(本机 detect_leaks=1 可用)与 libc memcpy 越界;TSan 需要 -Zbuild-std 才能报数据竞争;-Zsanitizer=leak/memory 在本机不支持;开销:分配密集场景 ×9.3,遍历 ×2.4,内存 ×2.3。
用 cargo-fuzz 0.13.2(libFuzzer)验证:没有初始语料,第 11,480 次执行就找到 parse 里「长度恰为 6」的越界 bug(随机输入 2 亿次 0 命中);崩溃输入可重放、已是最小;unsafe 的 get_unchecked 越界默认由 debug assertion、-O 时由 ASan 报告,--sanitizer none 则漏报;ASan 约 1.32M 次/秒,none 约 2.43M 次/秒。
用 cargo-audit 0.22.2 与 cargo-deny 0.20.2 审计一个固定了 smallvec 1.6.0、chrono 0.4.19、atty 0.2.14 的项目:报告 2 个漏洞(含 CVSS 9.8 的 smallvec)与 2 个警告;升级依赖后退出码 0;审计只看 Cargo.lock 不看调用图;cargo deny 另查许可证、重复版本与来源。
用 cargo build --timings 与 rustc -Z time-passes 分析编译时间:serde + serde_json + regex 共 28 个单元整体 5.05 秒,关键路径是 proc-macro2 → syn → serde_derive → serde;-j 1 对默认并行 11.8 对 3.2 秒;debug=0 不省时间;增量重编 0.20 秒。
分析 serde + serde_json + regex 程序的 release 体积(2240 KiB):.text 的 65% 来自 regex 家族;regex 关掉 Unicode 与 perf 特征到 1081 KiB(但 \w 不能用了);strip、panic=abort、opt-level=z、lto 逐项叠加到 1090 KiB;用 size、nm、cargo-bloat、cargo-llvm-lines 看构成。