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

可以使用哪些技术来调试Java程序中看似死锁的内容。 我的IDE是Eclipse,我想我已经识别出两个死锁的线程。 在调试器中,右键单击任何有问题的线程并选择suspend挂起线程并显示当前正在执行的代码。 尝试步入或跳过行问题似乎没有效果 – 线程状态更改为“Stepping”,控件永远不会返回调试器,除非再次单击suspend。
谢谢

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

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

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

对我来说,看起来最好的方法是检测死锁(即使它在每种情况下也无济于事,例如与EMT-Locks一起检测死锁)。

在“控制台模式”下运行程序时,可以按ctrl+break ,这会给你一个线程转储。 一旦遇到僵局,这可能会有所帮助。 如果死锁不经常出现,那么很难像这样陷入死锁。

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

我不知道日食,但你正在寻找的是一个探测器。 结帐JProfiler或查看此列表例如。 探查器直接连接到JVM,并实时显示程序内部的内容。 当发生死锁时,您会获得哪些线程冲突的视觉/文本线索。

我建议使用静态分析工具

FindBugs的

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