当我尝试使用 CMake sanitizers 模块构建我的 c++ 项目时here,我收到此警告:
MemorySanitizer 不适用于 GNU 编译器。
尽管当我在谷歌上搜索时,这里说 GNU 编译器支持内存清理程序。
我的开发环境是WSL2 Ubuntu 20.04,编译版本是9.4.0.
如评论中所述,GCC 文档 没有记录对 MemorySanitizer 的支持。没有
-fsanitize=memory
-的条目,但它有-fsanitize=address
、-fsanitize=leak
、-fsanitize=thread
和其他几个。
C/C++ 编译器 Clang/LLVM 和 GCC 支持所谓的清理器。这些清理器内置于应用程序代码中,并在运行时跟踪执行以报告执行错误。目前有四种有趣的消毒剂:
- AddressSanitizer 和 LeakSanitizer
- ThreadSanitizer
- MemorySanitizer
所以它看起来像是在粗略地说话,而那些粗略的笔画对于 GCC 和 MemorySantizer 来说是错误的。
交叉引用:MSAN 上的 Google 维基页面:
MemorySanitizer 是 LLVM trunk 的一部分,自版本 4.0 以来已作为编译时选项在 clang 中广泛使用。
Clang 支持页面:https://clang.llvm.org/docs/MemorySanitizer.html.