问题标签 [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.

0 投票
1 回答
756 浏览

c++11 - 使用线程清理程序运行代码时出现影子内存和 fPie 错误?

下面的代码示例是用后续的命令行输入编译的

命令行输入:

它编译得很好,但是当代码运行时会出现运行时错误。

我正在使用具有 fSanitize 的 g++ 版本运行它,所以我不确定问题的根源在哪里?

0 投票
0 回答
343 浏览

clang - clang-7.0 上缺少 libclang_rt.tsan-x86_64.a

我正在尝试寻找使用条件变量的多线程代码中的一些死锁。有人建议使用线程消毒剂。所以我从源代码编译了 LLVM并启用了线程清理器

LLVM CMake 配置

LLVM 构建得很好,但是当我尝试构建我的项目时,我遇到了很多此类警告:

我做错了什么以及如何解决?

0 投票
1 回答
1328 浏览

c++ - 如何使用比系统提供的更新版本的 clang 链接到线程清理程序?

我通常从他们的网站下载最新的 clang 版本。这有助于我使用最新版本的 C++,因为使用 gcc 这样做是不可能的。我刚得到我的 Ubuntu/Debian 的二进制文件,我很高兴。

对我来说,与tsan库(线程清理库)链接从来都不是一件简单的事情。我在 cmake 中使用了疯狂的措施来使其工作。以前,当我从系统中使用 gcc 时,这是我在 cmake 中为使链接正常工作所做的:

这基本上修改了链接标志以将每个小东西与tsan. 这已经工作了一段时间,但要让它工作,我应该使用系统的编译器 gcc。如果我尝试像这样与 clang 7 链接,则在运行程序时会出现段错误。

所以我搜索了tsanclang附带的可用库,这就是我发现的:

那里似乎有 tsan 图书馆。我想我必须链接到他们。我怎么做?

这似乎不起作用:

这也不起作用:

我尝试了其他一些组合。但它们似乎都不起作用。我得到的错误要么是链接错误,要么是对某些 tsan 组件的未定义引用。

如何从最新的 clang 的预构建二进制文件链接到 tsan?

0 投票
0 回答
78 浏览

c++ - 如何使线程消毒剂“更准确”?

根据线程消毒器文档

ThreadSanitizer 使用比本机运行更多的实际内存。在默认设置下,每个线程的内存开销是 5 倍加上 1Mb。还提供具有 3 倍(不太准确的分析)和 9 倍(更准确的分析)开销的设置。

我该如何选择这些设置?找不到它们的命令行参数

0 投票
0 回答
124 浏览

c++ - GCC 中的 TSan 报告 Clang 没有的错误

我已经实现了一个锁定的哈希表,并创建了一个相同的单元测试来测试对表的并发读/写。在使用 clang (AppleClang) 进行线程清理后,它没有报告任何错误,但另一方面 GCC (g++8) 会溢出我认为是误报的行。或者他们可能是真的吗?我已经用 clang 对代码进行了多次测试,但找不到逻辑错误。

锁定查找表代码:

测试代码:

GCC-8 TSan 错误:https ://travis-ci.org/horizo​​nxyz/horizo​​n/jobs/507336127#L1424

AppleClang 错误:https ://travis-ci.org/horizo​​nxyz/horizo​​n/jobs/507336131#L2950

0 投票
2 回答
508 浏览

ios - 无法在 Xcode 10.2 的模拟器上运行 iOS 应用程序

在 Xcode 10.2 中,我无法再在启用了线程清理程序的模拟器上运行我的应用程序。我得到错误

目前无法安装此应用程序。

WatchKit v3 应用已禁用 Info.plist 键:NSBuiltWithThreadSanitizer

我的应用程序包括一个手表应用程序和许多框架(一些用于手表,一些用于 iOS),但是当我尝试在模拟器上运行我的主应用程序时出现此错误。我检查了我的 plist 文件并确认这不是我在任何地方指定的密钥。

当我检查 DerivedData 中的 plist 文件时,我发现我的手表操作系统框架的所有 plist 确实都有这个密钥。但我能找到删除标志的唯一方法是完全禁用线程消毒剂。如何仅为手表而不是我的主应用禁用它?

0 投票
1 回答
293 浏览

gcc - 在 clang 或 gcc 中使用线程清理器时是否需要使用 -fopenmp

我正在尝试在给定的代码段(在 ok.c 文件中)上使用threadsanitizer:

这工作正常,没有检测到数据竞争,但是当我尝试给 -fopenmp 选项提供消毒剂时,它会转储终端,并在循环中可能存在数据竞争的位置。

我也尝试使用共享和私有属性来使事情更清楚。

问题:使用线程清理程序时是否需要 -fopenmp 标志?谢谢。

0 投票
1 回答
525 浏览

c++ - 如何检测 gcc 5 的线程消毒剂

如何检测是否已为使用 gcc 5 的构建打开了线程清理程序?两者之间__has_feature(thread_sanitizer)都不__SANITIZE_THREAD__工作

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


功能检查和__SANITIZE_THREAD__宏都可用于检测线程清理程序何时已打开,因此测试可以抑制误报(例如,当线程清理程序捕获实际上不是数据竞争的错误时)请参阅了解更多信息

0 投票
1 回答
847 浏览

c++ - ThreadSanitizer 报告的数据竞争

我正在使用启用了线程清理器的 Clang-8 来编译下面的代码

Thread sanitizer 报告全局变量的数据竞争警告data。为什么这被认为是数据竞赛?

更新

我已阅读为什么 ThreadSanitizer 会使用这个无锁示例报告比赛?并使用 Clang-8 编译代码。它不显示任何数据竞争警告。所以我认为我的情况不同。

0 投票
0 回答
764 浏览

c++ - 处理 tsan lock-order-inversion 误报

我有被 tsan 识别为锁顺序反转的代码。这是一个误报。我知道我可以使用抑制文件来防止这种情况,但我想知道我是否可以对我的代码做一些事情,以便我的意图更清晰并且不会被错误识别。这就是我正在做的事情:

这是 tsan 观察到的:

这是它警告我可能发生的事情:

问题是这不可能发生,因为 addObject 获取对象锁的唯一时间是如果对象刚刚创建并且无法成功锁定对象,这可能导致同一对象被锁定addObject。调用addObjectfromcloneObject将产生一个对象锁,但这必然是另一个对象,而不是被克隆的对象。