查找線程錯誤
回答
你可能想看看http://software.intel.com/en-us/articles/debugging-threaded-applications/,例如。有專門用於此任務的軟件,如http://software.intel.com/en-us/intel-thread-checker/。
編輯:對不起,沒有看到你問一個編譯時解決方案。也許這個答案仍然是相關的。
雖然我不知道有明確的線程安全診斷選項的任何編譯器,Coverity的是靜態分析工具,它確實爲併發問題提供跳棋,它通過在運行時不能被做可能是鬆散堪比「編譯時「,因爲編譯器是一個工具,它在生成代碼之前會對來過程的有效性做一些靜態分析,而這似乎是你正在尋找的東西,並不一定與編譯時間相關,即在生成代碼之前...
如果靜態分析工具瞭解併發原語,那麼可以對線程問題進行靜態分析。無論工具/編譯器是否處於正確指出這些問題的地步,我仍有待體驗。
注意:在工作中,我們使用Coverity進行靜態分析,但是當我們瀏覽該工具指向的所有「問題」時,我們還沒有啓用併發檢查器,因此我無法給出任何關於它如何工作的證明。至於其他更常見的棋子,他們指出了一些有效的問題,以及一些無害的問題,以及一些誤報。我希望儘快檢查併發檢查器的輸出以判斷自己的有用性。
雖然這不是編譯時,你可能會想看看Helgrind:
概述
Helgrind是 檢測C, C++同步錯誤和Fortran一個Valgrind的工具使用POSIX pthreads線程原語的程序。
在POSIX的主要抽象 pthreads的是:一組線程共享 一個公共地址空間,螺紋 創建,螺紋接合,螺紋出口處, 互斥(鎖),條件變量 的(線程間事件通知) , 讀寫器鎖,自旋鎖, 信號量和障礙。
Helgrind可以檢測三類 錯誤,其詳細 在接下來的三個部分中討論的:
的POSIX API並行線程的
- 誤用。
- 鎖定順序問題引起的潛在死鎖。
- 數據競賽 - 訪問內存時沒有足夠的鎖定或同步。
喜歡這些問題通常導致 不能再生,與時間相關的 崩潰,死鎖等 不當行爲,並且可能難以 查找其它手段。
Helgrind知道所有pthread 抽象並儘可能準確地跟蹤其效果 。在x86和 amd64平臺上,它理解並且 部分處理因使用LOCK 指令前綴而產生的隱式鎖定 。
當您的 應用程序僅使用POSIX pthreads API時,Helgrind的效果最佳。但是,如果您想要 使用自定義線程原語,則您可以使用helgrind.h中定義的ANNOTATE_ *宏 將其行爲描述爲 Helgrind。 Valgrind的版本 3.5.0中添加了這個功能,並且被認爲是實驗性的。
由於Boost.Threads基於POSIX pthreads(至少在Linux上),我猜測它也可以。
- 1. 查找線程
- 2. 查找線程
- 3. 需要找到線程錯誤
- 4. 線程錯誤
- 5. 錯誤線程()
- 6. 線程錯誤
- 7. 查找錯誤 - 找不到錯誤
- 8. TomEE查找錯誤
- 9. 查找Java錯誤
- 10. XCode - 查找錯誤
- 11. 查找C程序中的錯誤
- 12. MongoDB查找()查詢錯誤
- 13. C++線程錯誤?
- 14. SFML線程錯誤
- 15. 線程段錯誤
- 16. C#線程錯誤
- 17. Asynctask線程錯誤
- 18. Java線程錯誤
- 19. 跨線程錯誤
- 20. SFML線程錯誤
- 21. WPF線程錯誤
- 22. 多線程錯誤
- 23. WPF線程錯誤
- 24. 查找表與多線程
- 25. 如何查找Mysql線程
- 26. VBA查找 - 查找範圍錯誤
- 27. 線程錯誤 - 線程1:Breakpoint1.1
- 28. pthread_join錯誤,從線程進行線程
- 29. Qt多線程啓動線程錯誤
- 30. db2?查找錯誤DB2錯誤代碼
如果你有一個工具指出你在編譯時線程問題,我會說,*「Offcourse」* ?! – 2010-06-23 07:45:58