我正在努力调试构建为 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 应用程序”,指向我的项目,连接类型为“标准(套接字附加)”,主机本地主机,端口 30303。此配置似乎开始好的 - 至少,我没有收到任何反馈表明它没有 - 但我在 Groovy 代码中设置的断点实际上并没有中断对 Sling 应用程序请求的执行。
我在各种论坛上看到过一些帖子,这些帖子显示人们在通过远程 Java 应用程序配置调试 Groovy 代码时遇到问题,而他们在 Java 代码方面没有问题。不幸的是,我的应用程序全是 Groovy 而不是 Java,所以我无法在这里验证情况是否如此。
任何想法表示赞赏!
最佳答案
首先,一个建议。在 Xrunjdwp:transport 选项中设置 suspend=y
。这将在 main 中挂起,并让您更好地了解问题是出在调试选项上还是出在 Groovy 代码上。
现在,让我们来谈谈更复杂的事情。是的。有一些关于调试远程 Groovy 代码的问题。当动态加载 Groovy 代码时,通常会出现此问题。在这种情况下,调试名称通常与源名称不匹配,并且调试器不知道如何将动态加载的类文件与原始源代码匹配。
这里描述了一个这样的问题(毫无疑问,其他地方也会发生类似的事情): https://jira.springsource.org/browse/SPR-7113
因此,我对您的建议是,如果可能,您应该确保您的 groovy 代码在发送到服务器之前已经过预编译。 (同时设置 suspend=y
。)
关于java - 如何在 Eclipse 中通过远程 Java 应用程序调试来调试 Groovy 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9568957/