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

时间:2010-01-17 16:56:42

标签: java multithreading debugging

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

6 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

我建议使用像

这样的静态分析工具

FindBugs

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