Debugging 为什么IntelliJ在远程调试时跳过断点

Debugging 为什么IntelliJ在远程调试时跳过断点,debugging,intellij-idea,breakpoints,karaf,Debugging,Intellij Idea,Breakpoints,Karaf,我被要求调试安装在ApacheKaraf(OSGi)中的Java应用程序,该应用程序运行在我的开发机器上托管的VM中。我的同事已经能够使用Eclipse成功地进行远程调试。我选择的工具是IntelliJ,在我尝试远程调试时,IntelliJ成功连接(通过套接字)。如果暂停调试会话,Karaf控制台将按预期冻结,并在单击“继续”时恢复。但是当我暂停时,我可以在IntelliJ中看到以下消息,我的断点被忽略 目标VM未因断点请求而暂停。在此模式下,无法对方法进行评估 这是什么意思?我已经搜索并浏览了

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

目标VM未因断点请求而暂停。在此模式下,无法对方法进行评估


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

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

例如:

c:\> startfabric.bat debug
正如Tim所指出的,您现在需要确保您的源代码与部署到OSGI容器中的任何内容完全同步

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


最后,检查IntelliJ中的调试面板,删除在调试模式下可能会干扰的任何监视表达式。

我看到IDE跳过断点的唯一实例是控制台中的源代码与正在运行的可执行文件不匹配。所以你的断点永远不会被击中,因为它们不能被绑定到任何真正的代码上。但通过一个非常复杂的路径,结果证明源不匹配。因此,你的观察结果符合我的问题。蒂姆,谢谢你和史蒂夫在下面的回答。顺便说一句,我进一步发现,该特定消息与您停止的线程相关,而不是调试设置的属性。希望您和Steve在下面的回复对其他人有所帮助。如果下面的回复解决了您的问题,请将其标记为正确。