如何在 Eclipse 中通过远程 Java 应用程序调试来调试 Groovy 代码

Nic*_*ing 5 java eclipse groovy remote-debugging sling

我正在努力调试一个构建为 Sling 捆绑包的应用程序。该应用程序几乎完全是 Groovy 代码(我有 Groovy Eclipse 插件),Eclipse(使用 Maven)正在构建 .jar 并将其安装在 Sling 中,没有任何问题。

但是,它无法调试。我已按照说明设置远程调试,我认为这是调试 Sling 应用程序所必需的 - 具体来说,我使用以下命令启动 Sling:

java -Xdebug -Xnoagent -Djava.io.tmpdir=/c/Users/nickgolding1/temp -Xmx1024m -Xrunjdwp:transport=dt_socket,address=30303,server=y,suspend=n -jar org.apache.sling.launchpad-6-SNAPSHOT-standalone.jar -p 8080
Run Code Online (Sandbox Code Playgroud)

...然后在 Eclipse 中设置一个调试配置,类型为“远程 Java 应用程序”,指向我的项目,连接类型为“标准(套接字连接)”,主机本地主机,端口 30303。此配置似乎启动正常 - 在至少,我没有收到任何反馈表明它没有 - 但我在 Groovy 代码中设置的断点实际上并没有中断对 Sling 应用程序的请求的执行。

我在各个论坛上看到过一些帖子,这些帖子显示人们在通过远程 Java 应用程序配置调试 Groovy 代码时遇到问题,而他们在 Java 代码方面没有问题。不幸的是,我的应用程序都是 Groovy 而没有 Java,所以我无法验证这里的情况是否如此。

任何想法表示赞赏!

And*_*erg 4

首先,一个建议。suspend=y在 Xrunjdwp:transport 选项中进行设置。这将在 main 中挂起,并使您更好地了解问题是否出在调试选项或 Groovy 代码上。

现在,谈谈更复杂的事情。是的。远程 Groovy 代码的调试存在一些问题。该问题通常在动态加载 Groovy 代码时出现。在这种情况下,调试名称通常与源名称不匹配,并且调试器不知道如何将动态加载的类文件与原始源代码匹配。

这里描述了一个这样的问题(毫无疑问,其他地方也发生类似的事情): https ://jira.springsource.org/browse/SPR-7113

所以,我给你的建议是,如果可能的话,你应该确保你的 groovy 代码在发送到服务器之前经过预编译。(并且还设置了suspend=y。)