【问题标题】:Debugging multithreaded applications [duplicate]调试多线程应用程序[重复]
【发布时间】:2010-10-11 19:19:21
【问题描述】:

我有一个用 C++ 和 MFC 编写的应用程序,它是在 Windows 上运行的多线程。有时我会收到一些抱怨,例如死锁或由于这些线程引起的未处理异常。通常我使用 Visual Studio(如果问题是可重现的)或者使用 WinDbg 来分析生成的转储文件。有没有更好的方法来做到这一点?我可以使用其他一些工具来执行此操作吗?

【问题讨论】:

标签: c++ multithreading debugging winapi


【解决方案1】:

如果您有足够的预算,我会推荐Intel Thread Checker。它在分析正在运行的程序和提醒您可能的竞争条件方面做得很好。

查看demonstration video 了解更多信息。

【讨论】:

    【解决方案2】:

    我还没有开始使用它,但Relacy Race Detector 听起来对于追踪某些类别的线程问题非常有用。

    【讨论】:

      【解决方案3】:

      如果您在 CRITICAL_SECTIONs 上死锁,您可以使用 WinDbg 中的 !locks debugger extension 找出哪个线程拥有持有的锁,然后使用 kb 命令查看该线程的调用堆栈。

      【讨论】:

        【解决方案4】:

        多线程系统很复杂,阻塞的位置不是仅使用适当的工具即可完成的。要查找死锁的原因,您可以将锁定/解锁记录放在表映射中。启动“动作锁定”时,您保存在表中,解锁时会从表中删除记录。在循环结束时,您可以记录表的状态或期望特定事件执行此操作。
        在 dll 中构建此实现,因此您也可以在其他项目中使用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-21
          • 1970-01-01
          • 2013-04-17
          • 1970-01-01
          • 2020-11-24
          相关资源
          最近更新 更多