【发布时间】:2010-01-17 16:56:41
【问题描述】:
可以使用哪些技术来调试 Java 程序中的死锁。
我的 IDE 是 Eclipse,我想我已经确定了两个死锁的线程。在调试器中,右键单击任何有问题的线程并选择挂起挂起线程并显示当前正在执行的代码。尝试单步执行或跨行问题似乎没有任何效果 - 线程状态更改为“单步执行”,除非再次单击挂起,否则控制永远不会返回到调试器。
谢谢
【问题讨论】:
标签: java multithreading debugging
可以使用哪些技术来调试 Java 程序中的死锁。
我的 IDE 是 Eclipse,我想我已经确定了两个死锁的线程。在调试器中,右键单击任何有问题的线程并选择挂起挂起线程并显示当前正在执行的代码。尝试单步执行或跨行问题似乎没有任何效果 - 线程状态更改为“单步执行”,除非再次单击挂起,否则控制永远不会返回到调试器。
谢谢
【问题讨论】:
标签: java multithreading debugging
如果您使用的是 Sun JVM,则使用 JConsole 附加并转到“线程”窗格。有一个“检测死锁”按钮。
【讨论】:
几分钟前我偶然发现了这个:
http://runnerwhocodes.blogspot.com/2007/10/deadlock-detection-with-eclipse.html
对我来说,它似乎是检测死锁的最佳方法(即使在每种情况下都无济于事,例如结合 EMT-Locks 检测死锁)。
【讨论】:
在“控制台模式”下运行程序时,您可以点击ctrl+break,它会为您提供线程转储。一旦遇到僵局,这可能会有所帮助。如果死锁不经常出现,那么可能很难像这样捕获死锁。
【讨论】:
显示各种线程堆栈的调试窗口将指示线程何时停止。当两个线程停止时,您可以检查每个线程在等待什么。找到共同点就会告诉你死锁的根源。
【讨论】:
【讨论】: