如何检测 gcc 5 的线程清理程序

2024-04-29

如何检测使用 gcc 5 的构建是否已打开线程清理程序?两者之间都没有__has_feature(thread_sanitizer) nor __SANITIZE_THREAD__ work

#include <iostream>

using std::cout;
using std::endl;

int main() {
    cout << __has_feature(thread_sanitizer) << endl;
    cout << __SANITIZE_THREAD__ << endl;
}

https://wandbox.org/permlink/t5qYme4Whyj54aYV https://wandbox.org/permlink/t5qYme4Whyj54aYV。这在具有线程清理程序的 clang 版本上进行编译;但不适用于某些 gcc 版本(特别是 5)


功能检查和__SANITIZE_THREAD__宏对于检测线程清理程序何时打开非常有用,因此测试可以抑制误报(例如,当线程清理程序捕获实际上不是数据竞争的错误时)请参阅this https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual#suppressing-reports了解更多


我不知道,但作为最后的手段,下面的命令行会找到一个#define如果存在:

diff <(gcc -dM -E -x c /dev/null) <(gcc -fsanitize=thread -dM -E -x c /dev/null)

在我的 gcc 7.4.0 上它输出:



> #define __SANITIZE_THREAD__ 1
  

...意思就是__SANITIZE_THREAD__被定义为1如果你正在使用-fsanitize=thread, 但是没有定义的如果你不这样做。所以你应该保护你的代码#ifdef __SANITIZE_THREAD__而不是直接使用符号。

附加信息:

I 检查了 gcc 源代码 https://github.com/gcc-mirror/gcc/commit/ed0b0569e1f4ee44bddb565f3331b4f09a5f592b__SANITIZE_THREAD__直到 7.1.0 版本才引入宏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测 gcc 5 的线程清理程序 的相关文章

随机推荐

  • 添加覆盖 twinx 轴线条的图例

    我有这个Python代码 它与轴成对ax并在两个轴上绘制一些函数 我将图例绘制在ax1 问题是图例没有覆盖曲线ax2 有可能自动定位传说中的ax通过覆盖线ax2 请注意 在fig legend选项loc best 不可用 我需要在绘图区域内
  • 最长和最短的 HTML 字符实体名称是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 管子周围有
  • Python C api - 函数重载

    我有许多接受不同参数的 C 函数 例如 foo i int a foo c char c 是否可以在 python C api 中重载这些函数 我尝试使用以下方法表 static PyMethodDef test methods foo P
  • 如何在“nodejs”中查找请求参数

    当我向nodejs服务器发送请求时 当请求发送到nodejs服务器时 我们如何找到请求查询中发送的参数 req param req params req query 所有给予未定义 也当我stringify req请求它给出错误 Conve
  • 如何使用apache poi读取Excel文件中的多行和多列?

    我想读取附加的 excel 文件 使用 Apache POI 在匹配问题类型 滑块后 想要传递相应类的值 根据问题类型创建不同的类 https i stack imgur com PRbo5 png 使用 Fillo Java Jar 它非
  • 如何构建 Boost::program_options

    我想使用 boost program options 安装boost后 我认为我必须单独构建program options http www boost org doc libs 1 43 0 more getting started wi
  • 在 pymssql 中重复死锁查询后更新失败

    我将 SQL Server 与 pymssql 一起使用 发现一个特别复杂的 SELECT 查询偶尔会被选为死锁受害者 因此 我将其包装在 while 循环中 以便在发生这种情况时重试事务 大致如下 while True try curso
  • PostgreSQL - 添加组角色后密码身份验证失败

    我对 PostgreSQL 还很陌生 我花了整个上午的时间试图让用户登录正常工作 现在我感到非常沮丧 因此 我有一个 PostGIS 数据库 版本 9 2 作为 OpenGeo 软件套件的一部分 我可以使用 postgres 用户访问数据库
  • 为什么 Visual Studio 只允许项目中的每个文件有一个链接?

    我希望在一个解决方案的多个不同项目中拥有一个文件 但是 Visual Studio 只允许每个解决方案有一个到该文件的链接 有办法解决这个问题吗 VS 项目中的单个文件有多个软链接会出现什么问题 Update 我已经添加了下面评论中所述的链
  • 使用 Serde 反序列化时有没有办法允许未知的枚举标签? [复制]

    这个问题在这里已经有答案了 我正在反序列化一个标记的枚举 derive Deserialize enum Foo A A B B C C 如果 Serde 遇到一个不存在的标签A B or C 那么就会抛出错误 有没有办法为未知标签添加包罗
  • 通过 Liquibase 从 SQL 脚本创建函数

    项目配置 数据库 MySQL 5 7 orm Hibernate 4 3 11 Final JPA 1 3 1 RELEASE 液体库 3 4 2 当我仅从 Liquibase 从 workBeanch 运行脚本时 我的问题不存在
  • php isset 或空中的偏移类型非法

    我的这段代码最初可以工作 但在重新启动计算机后就无法工作 我收到的错误是 警告 第 4 行 D xampp htdocs cookieboylive classes Session php 中 isset 中存在非法偏移类型或为空 我的网站
  • Spreadsheet_Excel_Writer数据输出损坏

    我使用 Spreadsheet Excel Writer 生成 xls 文件 它工作正常 直到我必须处理大量数据 在某些阶段 它只是写入一些无意义的字符并停止填充某些列 然而 有些列直到最后都是字段 通常是数字数据 我不太确定xls文档是如
  • C/C++ 中的简单“Hello World”内联汇编语言程序

    我使用 devcpp 和 borland c 编译器 asm mov ax 4 I O Func mov bx 1 Output func mov cx name address of the string mov dx 6 length
  • 使表格行可点击

    我有一个表格行 悬停时有背景颜色 当用户在背景颜色区域内单击时 它应该抓取行内锚标记的链接并将用户带到那里 我该如何做到这一点 tr td a href http somesite com Go Here a p To find about
  • NSMutableArray addObject,无法识别的选择器

    我正在尝试创建数组 城市 的数组 州 每当我尝试将项目添加到城市数组时 我都会收到此错误 NSInvalidArgumentException 原因 NSMutableArray addObject 无法识别的选择器发送到类 0x30309
  • 无法在无头模式下最大化 Chrome 窗口

    我最近将 chrome 版本升级到 60 并将 chromedriver 升级到版本 2 31 发布当我尝试最大化浏览器窗口时 我开始收到以下异常 driver driver manage window maximize org openq
  • 自动调整大小在 iOS11 / XCode 9 中不起作用

    看来Autoresizing使用 XCode 9 为 iOS11 构建时 视图不再可靠地工作 几个视图的布局最终以控件在 XIB 中的位置进行定位 但尚未进行适当的大小调整 这在 iOS10 中运行良好 并且可以与我们在 iOS11 中运行
  • 键盘扩展:是否可以继承 iOS 现有键盘的功能和 UI?

    自定义键盘扩展 https developer apple com library ios documentation General Conceptual ExtensibilityPG Keyboard html是 iOS 8 中的一个
  • 如何检测 gcc 5 的线程清理程序

    如何检测使用 gcc 5 的构建是否已打开线程清理程序 两者之间都没有 has feature thread sanitizer nor SANITIZE THREAD work include