GNU 编译器内存清理器不可用

问题描述 投票:0回答:1

当我尝试使用 CMake sanitizers 模块构建我的 c++ 项目时here,我收到此警告:

MemorySanitizer 不适用于 GNU 编译器。

尽管当我在谷歌上搜索时,这里说 GNU 编译器支持内存清理程序。

我的开发环境是WSL2 Ubuntu 20.04,编译版本是9.4.0.

c++ cmake g++ memory-sanitizer
1个回答
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.

© www.soinside.com 2019 - 2024. All rights reserved.