问题标签 [thread-sanitizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++11 - 使用线程清理程序运行代码时出现影子内存和 fPie 错误?
下面的代码示例是用后续的命令行输入编译的
命令行输入:
它编译得很好,但是当代码运行时会出现运行时错误。
我正在使用具有 fSanitize 的 g++ 版本运行它,所以我不确定问题的根源在哪里?
clang - clang-7.0 上缺少 libclang_rt.tsan-x86_64.a
我正在尝试寻找使用条件变量的多线程代码中的一些死锁。有人建议使用线程消毒剂。所以我从源代码编译了 LLVM并启用了线程清理器
LLVM 构建得很好,但是当我尝试构建我的项目时,我遇到了很多此类警告:
我做错了什么以及如何解决?
c++ - 如何使用比系统提供的更新版本的 clang 链接到线程清理程序?
我通常从他们的网站下载最新的 clang 版本。这有助于我使用最新版本的 C++,因为使用 gcc 这样做是不可能的。我刚得到我的 Ubuntu/Debian 的二进制文件,我很高兴。
对我来说,与tsan
库(线程清理库)链接从来都不是一件简单的事情。我在 cmake 中使用了疯狂的措施来使其工作。以前,当我从系统中使用 gcc 时,这是我在 cmake 中为使链接正常工作所做的:
这基本上修改了链接标志以将每个小东西与tsan
. 这已经工作了一段时间,但要让它工作,我应该使用系统的编译器 gcc。如果我尝试像这样与 clang 7 链接,则在运行程序时会出现段错误。
所以我搜索了tsan
clang附带的可用库,这就是我发现的:
那里似乎有 tsan 图书馆。我想我必须链接到他们。我怎么做?
这似乎不起作用:
这也不起作用:
我尝试了其他一些组合。但它们似乎都不起作用。我得到的错误要么是链接错误,要么是对某些 tsan 组件的未定义引用。
如何从最新的 clang 的预构建二进制文件链接到 tsan?
c++ - GCC 中的 TSan 报告 Clang 没有的错误
我已经实现了一个锁定的哈希表,并创建了一个相同的单元测试来测试对表的并发读/写。在使用 clang (AppleClang) 进行线程清理后,它没有报告任何错误,但另一方面 GCC (g++8) 会溢出我认为是误报的行。或者他们可能是真的吗?我已经用 clang 对代码进行了多次测试,但找不到逻辑错误。
锁定查找表代码:
测试代码:
GCC-8 TSan 错误:https ://travis-ci.org/horizonxyz/horizon/jobs/507336127#L1424
AppleClang 错误:https ://travis-ci.org/horizonxyz/horizon/jobs/507336131#L2950
ios - 无法在 Xcode 10.2 的模拟器上运行 iOS 应用程序
在 Xcode 10.2 中,我无法再在启用了线程清理程序的模拟器上运行我的应用程序。我得到错误
目前无法安装此应用程序。
WatchKit v3 应用已禁用 Info.plist 键:NSBuiltWithThreadSanitizer
我的应用程序包括一个手表应用程序和许多框架(一些用于手表,一些用于 iOS),但是当我尝试在模拟器上运行我的主应用程序时出现此错误。我检查了我的 plist 文件并确认这不是我在任何地方指定的密钥。
当我检查 DerivedData 中的 plist 文件时,我发现我的手表操作系统框架的所有 plist 确实都有这个密钥。但我能找到删除标志的唯一方法是完全禁用线程消毒剂。如何仅为手表而不是我的主应用禁用它?
gcc - 在 clang 或 gcc 中使用线程清理器时是否需要使用 -fopenmp
我正在尝试在给定的代码段(在 ok.c 文件中)上使用threadsanitizer:
这工作正常,没有检测到数据竞争,但是当我尝试给 -fopenmp 选项提供消毒剂时,它会转储终端,并在循环中可能存在数据竞争的位置。
我也尝试使用共享和私有属性来使事情更清楚。
问题:使用线程清理程序时是否需要 -fopenmp 标志?谢谢。
c++ - 如何检测 gcc 5 的线程消毒剂
如何检测是否已为使用 gcc 5 的构建打开了线程清理程序?两者之间__has_feature(thread_sanitizer)
都不__SANITIZE_THREAD__
工作
https://wandbox.org/permlink/t5qYme4Whyj54aYV。这在具有线程清理器的 clang 版本上编译;但不适用于某些 gcc 版本(特别是 5)
功能检查和__SANITIZE_THREAD__
宏都可用于检测线程清理程序何时已打开,因此测试可以抑制误报(例如,当线程清理程序捕获实际上不是数据竞争的错误时)请参阅此了解更多信息
c++ - ThreadSanitizer 报告的数据竞争
我正在使用启用了线程清理器的 Clang-8 来编译下面的代码
Thread sanitizer 报告全局变量的数据竞争警告data
。为什么这被认为是数据竞赛?
更新
我已阅读为什么 ThreadSanitizer 会使用这个无锁示例报告比赛?并使用 Clang-8 编译代码。它不显示任何数据竞争警告。所以我认为我的情况不同。
c++ - 处理 tsan lock-order-inversion 误报
我有被 tsan 识别为锁顺序反转的代码。这是一个误报。我知道我可以使用抑制文件来防止这种情况,但我想知道我是否可以对我的代码做一些事情,以便我的意图更清晰并且不会被错误识别。这就是我正在做的事情:
这是 tsan 观察到的:
这是它警告我可能发生的事情:
问题是这不可能发生,因为 addObject 获取对象锁的唯一时间是如果对象刚刚创建并且无法成功锁定对象,这可能导致同一对象被锁定addObject
。调用addObject
fromcloneObject
将产生一个对象锁,但这必然是另一个对象,而不是被克隆的对象。