Rust 使用 Sanitizers 进行运行时安全检查
还是实验性功能
6 天前, Rust 引入了由 LLVM 提供的实验性的 Sanitizer 支持 (仅限 x86_64-unknown-linux-gnu
平台)
而今天 Rust Nightly 默认启用了 Sanitizer, 就是说所有用 Nightly 的小伙伴都可以直接更新体验 Sanitizer 啦 (废话
目前有如下几个 Sanitizer:
- LeakSanitizer 内存泄漏检查 (例如
Rc
环和std::mem::forget
) - ThreadSanitizer 数据竟态检查 (就是 go 的那个
-race
命令) - AddressSanitizer 内存寻址检查 (比如数组访问越界)
- MemorySanitizer 未初始化内存的使用检查
当然这主要还是为 unsafe
准备的,毕竟其他大部分情况都能在编译时检测出来
要使用 Sanitizers, 请先确认你的 rustc
版本大于 1.17.0-nightly (62eb6056d 2017-02-15)
, 或者在 configure
时启用了 --enable-sanitizers
参数
然后……
然后按照 https://github.com/japaric/rust-san 来吧, 我懒得复述了