我应该使用Helgrind还是DRD来检测线程错误?

31

看起来 Valgrind 有两个工具都可以检测线程错误: HelgrindDRD。这两个工具在很大程度上是相似的。

我的主要问题是:在检查我的多线程代码时,我应该何时使用其中一个工具而不是另一个工具呢?

更广泛地说,为什么会有两个工具? 我假设它们并不完全冗余。 重要的区别是什么? 我通常应该计划通过这两个工具运行我的代码吗?


如果我没错的话,DRD比Helgrind主要更新。不错的问题。 - sehe
4个回答

8

2
什么情况下我应该使用其中一个来检查我的多线程代码,而不是另一个呢?
这取决于您要检查该代码的内容。
如果要检查数据竞争,则可能需要使用ThreadSanitizer
与DRD和其他工具的比较

2

如果您使用的是除互斥锁之外的任何POSIX同步原语(例如,信号量、栅栏、条件变量等),那么值得运行DRD——它可以识别一些Helgrind无法检测到的微妙错误用法。

然而,在资源使用方面,DRD似乎比Helgrind更加密集(在我使用3.14.0运行时,CPU开销非常大)。


0
另一个需要考虑的问题是:从valgrind 3.6.0版本开始,DRD支持pthread自旋锁,但helgrind不支持。我还没有尝试过3.7.0版本,但发布说明让我相信这一点并没有改变。

7
从3.5.0版本开始,helgrind支持pthread_spinlock:http://valgrind.org/docs/manual/dist.news.html - leecbaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接