为啥 IntelliJ 在远程调试时跳过断点

Posted

技术标签:

【中文标题】为啥 IntelliJ 在远程调试时跳过断点【英文标题】:Why is IntelliJ skipping breakpoints while remotely debugging为什么 IntelliJ 在远程调试时跳过断点 【发布时间】:2015-05-22 02:25:24 【问题描述】:

有人要求我调试安装在 Apache Karaf (OSGi) 中的 Java 应用程序,该应用程序在我的开发机器上托管的 VM 中运行。我的同事已经能够使用 Eclipse 成功地进行远程调试。我选择的工具是 IntelliJ,在我尝试远程调试时,IntelliJ 连接成功(通过套接字)。如果我暂停调试会话,Karaf 控制台会按预期冻结并在我单击继续时恢复。但是当我暂停时,我可以在 IntelliJ 中看到以下消息,并且我的断点被忽略了。

断点请求未暂停目标 VM。在此模式下无法评估方法。

这是什么意思?我已经搜索并浏览了 IntelliJ 的文档。为什么 Eclipse 可以允许工作断点而 IntelliJ 不允许?

【问题讨论】:

我看到 IDE 跳过断点的唯一情况是控制台中的源代码与您正在运行的可执行文件不匹配。所以你的断点永远不会被命中,因为它们不能绑定到任何真实的代码。 好吧,我认为这是不可能的。但是经过一个非常曲折的路径,结果发现源不匹配。所以你的观察最终成为了我的问题。 蒂姆,感谢您和史蒂夫在下面的回复。顺便说一句,我进一步发现该特定消息与您停止的线程相关联,而不是您的调试设置的属性。希望您和史蒂夫在下面的回复对其他人有所帮助。 如果解决了您的问题,请在下面的回复中标记正确。 【参考方案1】:

首先,假设您已经在调试模式下启动了您的 OSGI 容器(例如,Fuse Fabric)。这通常是通过将参数 debug 添加到启动脚本来完成的。

例如:

c:\> startfabric.bat debug

正如 Tim 所说,您现在需要确保您的源代码与部署到 OSGI 容器的任何内容完全同步。

为了确定,检查与部署到服务器的源代码版本完全相同,然后选择Build -> Rebuild Project。如有必要,请在您的计算机上执行mvn clean install,并部署您自己构建的捆绑包/功能 - 然后您知道您本地拥有的代码应该与部署的完全匹配。

最后,检查 IntelliJ 中的调试面板,并删除在调试模式下可能会干扰的所有 Watch 表达式。

【讨论】:

以上是关于为啥 IntelliJ 在远程调试时跳过断点的主要内容,如果未能解决你的问题,请参考以下文章

在IntelliJ IDEA中远程断点调试tomcat

Docker容器中的Intellij CE 2018.2 + SBT:远程调试断点无法正常工作

intellij idea weblogic 下面 怎么远程断点

eclipse远程调试Tomcat方法

IntelliJ IDEA 2018.2.2远程调试Tomcat的配置方法

es自定义分词器插件通过IntelliJ Idea进行远程调试