IDEA远程debug中断后无法再次进入断点的问题

昨天在公司群里看到有人讨论这个问题,具体场景是这样的:

在远程debug的过程中,stop process后再重新执行远程debug,有一定几率会导致请求被hang住,进入不了断点。

有人给出了解释,原因是这样的:

 

一般IDE的 debug 底层使用的应该是jdi.  jdi 需要跟目标jvm 上的jvmti agent建立连接。并且intellij跟jvmti agent的交互通过事件完成。目标jvm上有EventQueue 来管理 来自 intellij 的event 请求。一个目标jvm上有且仅有一个EventQueue 实例。 相同的event请求会放在一个叫做eventSet 的集合中。EventQueue 会把处理完的 eventSet 发送给intellij。

特别地,随着一次事件集的发送,目标虚拟机上可能会有一部分的线程因此而被挂起。如果一直不恢复这些线程,有可能会导致目标jvm挂机。因此,在处理好一个事件集中的事件后,一般IDE 会调用事件集的 resume() 方法,恢复所有可能被挂起的线程。 如果中途中断了IDE 的远程调试,可能就会影响目标jvm上的线程,所以导致再次调试断点就不生效了。

目前已知的办法是重启服务后可以恢复。

更多内容可以阅读:https://www.ibm.com/developerworks/cn/java/j-lo-jpda4/index.html?ca=drs-

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值