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

时间:2011-11-16 19:43:50

标签: c pthreads valgrind

看起来Valgrind有两个工具都可以进行线程错误检测:HelgrindDRD。这些工具基本相似。

我的主要问题是:我何时应该使用一个而不是另一个来检查我的多线程代码?

更广泛地说,为什么有两种工具?我认为它们并非完全多余。有什么重要的区别?我是否应该计划通过这两种工具运行我的代码?

4 个答案:

答案 0 :(得分:7)

虽然Helgrind可以检测到锁定顺序违规,但对于大多数程序,DRD需要较少的内存来执行其分析。此外,DRD支持分离线程。还有更微妙的差异 - 如果您想了解更多,请比较相应的手册。另请参阅http://valgrind.org/docs/manual/hg-manual.htmlhttp://valgrind.org/docs/manual/drd-manual.html

答案 1 :(得分:2)

如果您使用除互斥体之外的任何POSIX同步原语(例如,信号量,障碍,条件变量等),DRD值得一试 - 它可以识别Helgrind没有的一些微妙的误用检测

然而,DRD似乎比Helgrind更加耗费资源(在使用3.14.0的运行中,似乎有大量的CPU开销)。

答案 2 :(得分:1)

  

何时应该使用一个而不是另一个来检查我的多线程代码?

取决于你要检查代码的

要检查数据竞赛,您可能需要使用ThreadSanitizer Comparison with DRD and others

答案 3 :(得分:0)

还有一点要考虑:从valgrind版本3.6.0开始,DRD支持pthread螺旋锁,但helgrind不支持。我没有试过3.7.0,但发行说明让我相信这没有改变。