【问题标题】:How to Debug a deadlock in Java using Eclipse如何使用 Eclipse 调试 Java 中的死锁
【发布时间】:2010-01-17 16:56:41
【问题描述】:

可以使用哪些技术来调试 Java 程序中的死锁。 我的 IDE 是 Eclipse,我想我已经确定了两个死锁的线程。在调试器中,右键单击任何有问题的线程并选择挂起挂起线程并显示当前正在执行的代码。尝试单步执行或跨行问题似乎没有任何效果 - 线程状态更改为“单步执行”,除非再次单击挂起,否则控制永远不会返回到调试器。
谢谢

【问题讨论】:

    标签: java multithreading debugging


    【解决方案1】:

    如果您使用的是 Sun JVM,则使用 JConsole 附加并转到“线程”窗格。有一个“检测死锁”按钮。

    【讨论】:

      【解决方案2】:

      几分钟前我偶然发现了这个:

      http://runnerwhocodes.blogspot.com/2007/10/deadlock-detection-with-eclipse.html

      对我来说,它似乎是检测死锁的最佳方法(即使在每种情况下都无济于事,例如结合 EMT-Locks 检测死锁)。

      【讨论】:

        【解决方案3】:

        在“控制台模式”下运行程序时,您可以点击ctrl+break,它会为您提供线程转储。一旦遇到僵局,这可能会有所帮助。如果死锁不经常出现,那么可能很难像这样捕获死锁。

        【讨论】:

          【解决方案4】:

          显示各种线程堆栈的调试窗口将指示线程何时停止。当两个线程停止时,您可以检查每个线程在等待什么。找到共同点就会告诉你死锁的根源。

          【讨论】:

            【解决方案5】:

            我不了解 eclipse,但您正在寻找的是探查器。例如,结帐JProfiler 或查看this list。分析器直接连接到 JVM 并实时可视化程序内部发生的事情。当死锁发生时,您可以获得哪些线程发生冲突的视觉/文本线索。

            【讨论】:

            • YourKit 具有最好的线程表示,有时它甚至可以自动检测死锁。
            【解决方案6】:

            我建议使用静态分析工具,例如

            FindBugs

            ,通常可以在编译时检测死锁

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多