【问题标题】:How to determine when -fsanitize=memory is in use?如何确定何时使用 -fsanitize=memory?
【发布时间】:2016-02-27 03:10:49
【问题描述】:

我想在使用内存清理程序时清除 FD_ZEROFD_SET 的误报。清除它有点容易:

#include <sanitizer/msan_interface.h>
...

__msan_unpoison(&readfds, sizeof(readfds));
__msan_unpoison(&writefds, sizeof(writefds));

但是,我不知道如何检测内存清理程序何时使用。也就是说,检测何时在命令行上指定了-fsanitize=memory。预处理器似乎没有帮助:

$ clang -dM -E -fsanitize=memory - </dev/null | egrep -i 'memory|sanitize|msan'
$

我如何确定-fsanitize=memory 的使用时间?

【问题讨论】:

  • 作为一种解决方法,有-DSANITIZED_MEMORY

标签: c macros c-preprocessor msan


【解决方案1】:

根据Memory Sanitizer mailing list 上的 Konstantin Serebryany 所述,没有预处理器宏。应该使用__has_feature(memory_sanitizer)

#if defined(__has_feature)
#  if __has_feature(memory_sanitizer)
#    define MEMORY_SANITIZER 1
#  endif
#endif
...

#ifdef MEMORY_SANITIZER
#  include <sanitizer/msan_interface.h>
#endif
...

#ifdef MEMORY_SANITIZER
__msan_unpoison(&readfds, sizeof(readfds));
__msan_unpoison(&writefds, sizeof(writefds));
#endif
...

【讨论】: