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