看起来Valgrind有两个工具都可以进行线程错误检测:Helgrind和DRD。这些工具基本相似。
我的主要问题是:我何时应该使用一个而不是另一个来检查我的多线程代码?
更广泛地说,为什么有两种工具?我认为它们并非完全多余。有什么重要的区别?我是否应该计划通过这两种工具运行我的代码?
答案 0 :(得分:7)
虽然Helgrind可以检测到锁定顺序违规,但对于大多数程序,DRD需要较少的内存来执行其分析。此外,DRD支持分离线程。还有更微妙的差异 - 如果您想了解更多,请比较相应的手册。另请参阅http://valgrind.org/docs/manual/hg-manual.html和http://valgrind.org/docs/manual/drd-manual.html。
答案 1 :(得分:2)
如果您使用除互斥体之外的任何POSIX同步原语(例如,信号量,障碍,条件变量等),DRD值得一试 - 它可以识别Helgrind没有的一些微妙的误用检测
然而,DRD似乎比Helgrind更加耗费资源(在使用3.14.0的运行中,似乎有大量的CPU开销)。
答案 2 :(得分:1)
答案 3 :(得分:0)
还有一点要考虑:从valgrind版本3.6.0开始,DRD支持pthread螺旋锁,但helgrind不支持。我没有试过3.7.0,但发行说明让我相信这没有改变。