2016-02-27 26 views
3

當內存清潔劑正在使用時,我想清除FD_ZEROFD_SET上的誤報。清除它有點容易:如何確定何時使用-fsanitize = memory?

#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在使用?

+0

作爲解決方法,有'-DSANITIZED_MEMORY' –

回答

0

根據Konstantin Serebryany的Memory Sanitizer mailing list,沒有預處理宏。應該使用__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 
...