我有一个用C ++和MFC编写的应用程序,它在Windows上运行多线程。偶尔我会得到一些抱怨,例如死锁或由于这些线程而导致的未处理异常。通常我使用visual studio(如果问题是可重现的),或者使用WinDbg来分析生成的转储文件。有没有更好的方法呢?我可以使用其他一些工具来做到这一点吗?
答案 0 :(得分:3)
如果你有足够的预算,我会推荐Intel Thread Checker。它可以很好地分析正在运行的程序并提醒您可能的竞争条件。
查看demonstration video了解详情。
答案 1 :(得分:2)
我还没有使用它,但Relacy Race Detector听起来对于跟踪某些类别的线程问题非常有用。
答案 2 :(得分:2)
如果你在CRITICAL_SECTIONs上死锁,你可以使用WinDbg中的!locks debugger extension来找出哪个线程拥有一个保持锁,然后使用kb命令查看该线程的callstack。
答案 3 :(得分:1)
多线程系统很复杂,只有使用适当的工具才能进行阻塞。要找到死锁的原因,您可以在表映射中记录锁定/解锁。当您启动“操作锁定”时,您将保存在表格中,当解锁时,将从表格中删除记录。在循环结束时,您可以记录表格的状态或期望特定事件来执行此操作 在dll中构建此实现,因此您也可以在其他项目中使用它。