jww*_*jww 5 c macros c-preprocessor msan
我想清除使用内存清理器的时间FD_ZERO和误报FD_SET。清除它很容易:
#include <sanitizer/msan_interface.h>
...
__msan_unpoison(&readfds, sizeof(readfds));
__msan_unpoison(&writefds, sizeof(writefds));
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何检测何时使用了内存清理程序。即,检测在-fsanitize=memory命令行上指定的时间。预处理器似乎没有帮助:
$ clang -dM -E -fsanitize=memory - </dev/null | egrep -i 'memory|sanitize|msan'
$
Run Code Online (Sandbox Code Playgroud)
如何确定何时-fsanitize=memory使用?
根据Memory Sanitizer 邮件列表上的 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
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |