看起來像Valgrind有兩個工具都可以執行線程錯誤檢測:Helgrind和DRD。這些工具非常相似。我應該使用Helgrind還是DRD進行線程錯誤檢測?
我的主要問題是:什麼時候應該使用一個而不是另一個來檢查我的多線程代碼?
更廣泛地說,爲什麼會有兩種工具?我認爲他們並不完全是多餘的。有什麼重要的區別?我應該通常計劃通過這兩種工具來運行我的代碼嗎?
看起來像Valgrind有兩個工具都可以執行線程錯誤檢測:Helgrind和DRD。這些工具非常相似。我應該使用Helgrind還是DRD進行線程錯誤檢測?
我的主要問題是:什麼時候應該使用一個而不是另一個來檢查我的多線程代碼?
更廣泛地說,爲什麼會有兩種工具?我認爲他們並不完全是多餘的。有什麼重要的區別?我應該通常計劃通過這兩種工具來運行我的代碼嗎?
儘管Helgrind可以檢測鎖定順序違規,但對於大多數程序,DRD需要更少的內存來執行其分析。另外,DRD支持分離的線程。還有更細微的差別 - 如果您想了解更多信息,請比較相應的手冊。另見http://valgrind.org/docs/manual/hg-manual.html和http://valgrind.org/docs/manual/drd-manual.html。
什麼時候應該使用一個來代替另一個來檢查我的多線程代碼?
取決於什麼你想檢查的代碼。
要檢查數據競賽,您可能需要使用ThreadSanitizer。
Comparison with DRD and others。
還有一點需要考慮:從valgrind版本3.6.0開始,DRD支持pthread自旋鎖,但helgrind不支持。我還沒有嘗試過3.7.0,但發行說明讓我相信這並沒有改變。
從3.5.0開始,helgrind支持pthread_spinlock:http://valgrind.org/docs/manual/dist.news.html – leecbaker
如果您使用除互斥鎖以外的任何POSIX同步原語(例如信號量,障礙,條件變量等),DRD值得一試 - 它可以識別Helgrind未檢測到的一些細微誤用。
但是,DRD似乎比Helgrind更耗費資源(在使用3.14.0的我的運行中似乎有大量的CPU開銷)。
如果我沒有錯,DRD主要比Helgrind更新。好問題,雖然 – sehe