看起来Valgrind有两个工具都可以进行线程错误检测: Helgrind和DRD 。 这些工具基本相似。
我的主要问题是:我何时应该使用一个而不是另一个来检查我的multithreading代码?
更广泛地说,为什么有两种工具? 我认为它们并非完全多余。 有什么重要的区别? 我是否应该计划通过这两种工具运行我的代码?
虽然Helgrind可以检测到锁定顺序违规,但对于大多数程序,DRD需要较少的内存来执行其分析。 此外,DRD支持分离线程。 还有更微妙的差异 – 如果您想了解更多,请比较相应的手册。 另见https://valgrind.org/docs/manual/hg-manual.html和https://valgrind.org/docs/manual/drd-manual.html 。
如果您使用除互斥体之外的任何POSIX同步原语(例如,信号量,障碍,条件变量等),DRD值得运行 – 它可以识别Helgrind未检测到的一些微妙的错误。
但是,DRD似乎比Helgrind更耗费资源(在我使用3.14.0的运行中似乎有大量的CPU开销)。
我何时应该使用一个而不是另一个来检查我的multithreading代码?
取决于您要检查该代码的内容。
要检查数据争用,您可能需要使用ThreadSanitizer 。
与DRD和其他人比较 。
还有一点要考虑:从valgrind版本3.6.0开始,DRD支持pthread螺旋锁,但helgrind不支持。 我没有试过3.7.0,但发行说明让我相信这没有改变。
需要了解更多c/c++开发分享我应该使用Helgrind还是DRD进行线程错误检测?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享我应该使用Helgrind还是DRD进行线程错误检测?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980050.html