如何使用Eclipse调试Java中的死锁

如何使用Eclipse调试Java中的死锁,java,multithreading,debugging,Java,Multithreading,Debugging,可以使用什么技术来调试Java程序中出现的死锁。 我的IDE是Eclipse,我想我已经识别了两个死锁的线程。在调试器中,右键单击任何有问题的线程并选择“挂起”将挂起该线程并显示当前正在执行的代码。尝试单步执行或跨行执行问题似乎没有效果-线程状态更改为“单步执行”,除非再次单击“挂起”,否则控制将永远不会返回到调试器。 谢谢我不知道eclipse的情况,但您需要的是一个分析器。例如,结帐或查看。探查器直接连接到JVM,并实时可视化程序内部发生的事情。当死锁发生时,您将获得哪些线程冲突的视觉/文本

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

谢谢

我不知道eclipse的情况,但您需要的是一个分析器。例如,结帐或查看。探查器直接连接到JVM,并实时可视化程序内部发生的事情。当死锁发生时,您将获得哪些线程冲突的视觉/文本线索。

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

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

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

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


,它通常可以在编译时检测死锁。几分钟前,我偶然发现:


对我来说,它似乎是检测死锁的最佳方法(即使它在每种情况下都没有帮助,例如结合EMT锁检测死锁)。

YourKit具有线程的最佳表示,有时它甚至可以自动检测死锁。