问题标签 [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 回答
390 浏览

c++ - std::future 可以比 std::promise 活得更久吗?

clang ThreadSanitizer在以下代码中报告数据竞争:

我可以通过替换来修复p = std::move(p)比赛&p。但是,我找不到解释promiseandfuture对象是否是线程安全的或者它们被销毁的顺序是否重要的​​文档。我的理解是,由于承诺和未来通过“共享状态”进行通信,因此状态应该是线程安全的,销毁顺序应该无关紧要,但 TSan 不同意。(没有 TSan,程序似乎运行正常,而不是崩溃。)

这段代码是否真的有潜在的竞争,或者这是一个 TSan 误报?


您可以通过在 Ubuntu 19.10 Docker 容器中运行以下命令,使用 Clang 9 重现这一点:

显示数据竞争的示例输出(实际输出在运行之间略有不同):

0 投票
0 回答
672 浏览

ios - (Xcode 11.2.1) 找不到 Thread Sanitizer 运行时支持库 (iOS)

使用 Xcode 11.2.1 为 iOS 创建了一个 View 项目,并在 Scheme 中启用了 Thread Sanitizer。注意:在模拟器iPhone Xr 13.2.2上运行应用程序

运行项目后,出现以下错误:

请求被服务委托 (SBMainWorkspace) 拒绝,原因是:未指定(“null”)。

当将可执行文件设置为启动时询问时,会出现以下错误:

找不到 Thread Sanitizer 运行时支持库。请通过设置 DYLD_INSERT_LIBRARIES 环境变量手动指定它。

如果禁用Thread Sanitizer,则应用程序在模拟器中正常启动。

在这种情况下的任何帮助将不胜感激。谢谢!

0 投票
1 回答
731 浏览

c++ - 这个线程消毒剂警告中的比赛在哪里?

以下代码在 macOS 上使用 thread sanitizer 运行时会产生警告。我看不到比赛在哪里。shared_ptr 和weak_ptr 的控制块是线程安全的,并且std::queue通过持有锁来完成推送和弹出操作。

堆栈跟踪警告:

编辑:我编译它:

铿锵版本:

我正在使用 macOS 10.14.6

0 投票
1 回答
215 浏览

c++ - tsan 对 notify_all_at_thread_exit 的投诉

当我运行从分离线程调用 notify_all_at_thread_exit() 的代码时,tsan 抱怨 pthread_cond_broadcast 和 pthread_cond_destroy 之间的数据竞争。难道我做错了什么?或者这是来自tsan的误报?

FWIW,使用 clang8 和 libc++ 从 TSAN 收到一个非常相似的错误:

0 投票
3 回答
1562 浏览

ios - Xcode 11.2.1 Thread Sanitizer abort_with_payload

我正在尝试在 Xcode 11.2.1 中使用 Thread Sanitizer,但是每当应用程序启动时(只是 Xcode 模板中的一个视图应用程序,没有添加任何内容),它都会触发 __abort_with_payload:

Apple 的文档或其他人使用 Thread Sanitizer 的指南都没有说除了在方案设置中打勾外,您还需要做任何事情,但对我来说这不起作用:(

打印出 $arg5 给出

pthread_t 已损坏

这听起来不太好!

这是在 Catalina 10.15.2 上使用 iPhone 11 Pro Max 模拟器

0 投票
1 回答
587 浏览

ios - 打开 Thread Sanitizer 会产生信号 SIGABRT

当我在 Xcode 版本 11.3 (11C29) 中创建一个新的单视图应用程序并运行它时,一切正常。

当我打开 Thread Sanitize

TS 选项

并尝试运行相同的应用程序,我得到Thread 1: signal SIGABRT

在此处输入图像描述

这是回溯

我错过了一些东西或错误地使用了 Thread Sanitizer。

编辑:我在 ID 为 FB7513235 的反馈助手中打开了 Apple 的问题。我在反馈助手中打开的工单表明存在类似的报告问题。

0 投票
1 回答
246 浏览

c++ - OpenMP 中并行块外的竞争条件 (ThreadSanitizer);假阳性?

以下最小示例计算从 1 到 1000 的所有数字的总和,并与 OpenMP 并行化:

我尝试使用clang++-6.0.0andg++-5.4.0和 ThreadSanitizer 来编译它。libomp.so两个编译器都会在/中产生一些关于竞争条件的警告libgomp.so,我假设这是误报,以及关于我的代码的以下警告:

不过,我在我的代码中看不到任何数据竞争!

我也尝试用atomic一个部分替换更新critical,如下所示:

这改变了警告,但新的警告没有多大意义:

这些警告是真实数据竞争的迹象,还是误报?

0 投票
1 回答
333 浏览

c - 未检测到 ThreadSanitizer 死锁并且最后没有结果(由于死锁程序)

我想知道线程清理程序(clang)的死锁在哪里,但问题是程序被阻止并且在使用 -fsanitize=thread 选项的编译期间未检测到死锁。并且在执行结束时没有结果,因为程序被阻塞(由于死锁而无法退出程序)。

0 投票
0 回答
117 浏览

c++ - 调用接收到的事件实例时使用 QCoreApplication::postEvent() 报告线程清理程序

我有以下代码:

在哪里

我得到了线程消毒剂报告,但不知道为什么。

考虑到 EventReceiver 是在线程中创建并发布到主线程,为什么会发生这种情况,这似乎是虚拟方法执行的竞争,但此时对象已完全构造。

后期编辑 虽然这似乎是一场良性的比赛。消毒剂不知道/看到 EventReceiver::event(QEvent* event) 在使用 QCoreApplication::postEvent(&target, event) 之后发生/由使用 QCoreApplication::postEvent(&target, event) 引起,这发生在 MyEvent 构造之后(因为 MyEvent 实例输入到 QCoreApplication::事后)

我可以添加明确的围栏以使消毒剂清楚这一点,但这似乎过分了?想知道是否建议只使用一些注释来禁用它。

0 投票
0 回答
293 浏览

gcc - 在代码中使用 ThreadSanitizer 的 Mutex 名称

我正在使用 GCC 9.2 TSan 来分析我的代码库的运行时多线程行为(明确使用 pthreads——我们在 C++11 之前开始)。在持有已销毁的互斥锁时,我进行了数据竞赛,其中包含以下内容(相对无用):

并且没有关于这个互斥体是在哪里创建或在哪里被破坏的更多信息。TSan 报告访问的堆位置的堆栈跟踪,堆内存分配的位置和线程的创建,但没有互斥体被破坏的位置的堆栈跟踪。

我想将一些调试输出添加到我可能为这些互斥锁候选的地方,但如果我不能以任何方式将调试语句互斥锁与报告的互斥锁相关联,这对我没有帮助——因此问题是:

有没有办法M974039071667323520在我自己的代码中使用 ThreadSanitizer 报告的互斥锁名称?


从我通过 gcc 的代码库 grepping 大约 10 分钟收集到的信息来看libsanitizers/tsan/,内部计数器似乎uid_gen_是原子递增的,SyncVar这意味着它是 tsan 的私有值,并且无法在我的代码中获取该值,这是正确的吗?