查找线程错误
回答
你可能想看看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