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

11

有哪些技术可以用来调试一个Java程序中看起来是死锁的问题。我的IDE是Eclipse,我认为我已经确定了两个死锁的线程。在调试器中,右键单击任何相关的线程并选择暂停会暂停该线程并显示当前正在执行的代码。尝试步入或步过所涉及的行似乎没有效果-线程状态更改为“ Stepping”,控制不会返回调试器,除非再次单击暂停。
谢谢

6个回答

11
如果您正在使用 Sun JVM,请使用 JConsole 连接,并进入线程面板。这里有一个“检测死锁”按钮。

4

1
在“控制台模式”下运行程序时,您可以按ctrl+break键,这将为您提供线程转储。一旦遇到死锁,这可能会有所帮助。但是,如果死锁并没有太经常出现,通过这种方式捕获死锁可能会很困难。

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

0
我不知道Eclipse,但你需要的是一个分析器。可以查看JProfiler或者这个列表。分析器直接连接到JVM,并实时可视化程序内部的运行情况。当死锁发生时,你会得到哪些线程发生了冲突的视觉/文本提示。

1
YourKit 表现出最佳的线程表示,有时甚至可以自动检测死锁。 - nanda

-1
我建议使用静态分析工具,例如 FindBugs ,它通常可以在编译时检测到死锁问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接