0

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

Mutex M974039071667323520 is already destroyed.

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

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

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


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

4

0 回答 0