Cur*_*ous 6 c++ gcc thread-sanitizer c++14
如何检测使用 gcc 5 的构建是否已打开线程清理程序?两者之间的任何一个__has_feature(thread_sanitizer)都不__SANITIZE_THREAD__工作
#include <iostream>
using std::cout;
using std::endl;
int main() {
cout << __has_feature(thread_sanitizer) << endl;
cout << __SANITIZE_THREAD__ << endl;
}
Run Code Online (Sandbox Code Playgroud)
https://wandbox.org/permlink/t5qYme4Whyj54aYV。这在具有线程清理程序的 clang 版本上进行编译;但不适用于某些 gcc 版本(特别是 5)
功能检查和__SANITIZE_THREAD__宏都可用于检测线程清理程序何时打开,因此测试可以抑制误报(例如,当线程清理程序捕获实际上不是数据争用的错误时)请参阅此了解更多信息
我不知道,但作为最后的手段,以下命令行将查找#define (如果存在):
diff <(gcc -dM -E -x c /dev/null) <(gcc -fsanitize=thread -dM -E -x c /dev/null)
Run Code Online (Sandbox Code Playgroud)
在我的 gcc 7.4.0 上它输出:
> #define __SANITIZE_THREAD__ 1
...这意味着如果您正在使用 则__SANITIZE_THREAD__定义为,但如果您不使用则未定义。因此,您应该保护您的代码,而不是直接使用该符号。1-fsanitize=thread#ifdef __SANITIZE_THREAD__
我检查了gcc源码,__SANITIZE_THREAD__直到7.1.0版本才引入该宏。
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |