4

我正在努力调试构建为 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

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

我在各种论坛上看到过一些帖子,这些帖子表明人们通过远程 Java 应用程序配置调试 Groovy 代码时遇到了问题,而他们对 Java 代码没有问题。不幸的是,我的应用程序都是 Groovy 并且没有 Java,所以我无法验证这里的情况。

任何想法表示赞赏!

4

1 回答 1

4

首先,一个建议。suspend=y在您的 Xrunjdwp:transport 选项中设置。这将在 main 中暂停,并让您更好地了解您的问题是与您的调试选项还是 Groovy 代码有关。

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

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

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

于 2012-03-05T16:23:09.817 回答