我有时被迫离开办公室工作,这意味着我需要VPN进入我的实验室。我注意到在这种情况下使用Eclipse进行远程调试非常慢。缓慢到调试器连接到远程jvm需要5-7分钟的时间点。连接后,单步执行断点/线路每次可能需要20-30秒,并且通常只会断开连接,使我不得不重新开始。
任何人都可以解释为什么会这样,即使没有可用的解决方案?考虑到远程调试器的行为,我通过VPN的延迟几乎不是人们期望的。我通过VPN做各种其他的事情,最小的滞后/阻塞。
我真的很难理解为什么远程调试器受到VPN的影响,基本上每个其他网络操作都没问题。
谢谢,
答案 0 :(得分:10)
感谢您试图帮助,伙计们。幸运的是,受同样问题困扰的我的一位同事深入研究了它。来自我同事的信件:
"我在Eclipse和我的VM之间设置了一个代理,它从Eclipse发送到我的VM的JDWP数据包中打印出命令代码。 http://docs.oracle.com/javase/8/docs/platform/jpda/jdwp/jdwp-protocol.html页面向我解释了这些命令的含义。 我看到的是:每次我执行代码时,Eclipse都会发送数十个和几十个"线程监视器" - 与VM相关的命令。它们与以下VM功能相关:canGetMonitorInfo,canGetCurrentContendedMonitor,canGetOwnedMonitorInfo,canGetMonitorFrameInfo"
这些能力造成了疯狂的滞后。他已经制定了一个强制禁用这些功能的解决方案,并且调试器的可用性飙升。显然,远程调试器的线程监视功能不再有效,但考虑到之前远程调试的不可用性,这是一个很好的折衷方案。
我将尝试找出他是如何做的,以禁用线程监控功能。
答案 1 :(得分:3)
禁用function f(input, acc) {
acc = acc || 'f'
if (input === undefined) {
return function(a) {
return f(a, acc + 'o')
}
}
return acc + input
}
console.log(f('l'))
console.log(f()(''))
console.log(f()('l'))
console.log(f()()('foo'))
确实帮助了我。
在调试透视图中很难发现Show monitor
。所以
只需发布链接中缺失的图像。
答案 2 :(得分:0)
通过对一个相当大的项目(几乎100个子项目,ping时间~200-300ms)的非常轻微的测试,与Eclipse相比,Netbeans似乎做得很好。
您可以步进,并且需要几秒钟的时间来更新并附加< 1分钟。
无法使用Eclipse当然很烦人,但它是一个GUI,比普通的JDB更好。
答案 3 :(得分:-1)
听起来你需要设置它才能通过VPN调试你的应用程序。顺便说一下,这也是SO posting中的答案。
我希望这有助于你的情况。祝你好运!