ASan(AddressSanitizer,地址消毒器)是 LLVM/GCC 编译器内置的一款内存错误检测工具,能在程序运行时捕获越界访问、释放后使用、栈溢出等内存缺陷。它通过编译期插桩加运行时影子内存的方式工作,通常只带来约两倍的性能开销和更高的内存占用,因此广泛用于 C/C++ 项目的测试与 CI 流程,是当前定位内存问题事实上的标准工具之一。
ASan 近期进展
当前焦点与观察点
围绕 ASan 的讨论目前集中在三个方向。其一是开销权衡:插桩带来的内存膨胀使它难以在生产环境长期开启,社区因此推动了最小运行时、部分插桩等折中方案。其二是与现代语言趋势的关系:Rust 等内存安全语言在减少整类缺陷上效果显著,但存量 C/C++ 代码规模庞大,ASan 仍是迁移完成前的主要防线。其三是与 fuzzing 的结合:ASan 已成为 libFuzzer、OSS-Fuzz 等模糊测试基础设施的标配组件,能否在 CI 中低成本开启、快速定位崩溃点,直接决定项目的修复效率。对于维护 C/C++ 代码库的团队,把 ASan 纳入日常构建而非事后排障,仍是性价比最高的实践。