【问题标题】:How to debug Groovy code via the remote Java application debugging in Eclipse如何通过 Eclipse 中的远程 Java 应用程序调试来调试 Groovy 代码
【发布时间】:2012-03-23 01:28:09
【问题描述】:

我正在努力调试构建为 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中设置一个调试配置,类型为“Remote Java Application”,指向我的项目,连接类型“Standard(Socket Attach)”,主机localhost,端口30303。这个配置似乎启动了好的 - 至少,我没有收到任何反馈表明它没有 - 但是我在 Groovy 代码中设置的断点实际上并没有中断对 Sling 应用程序的请求的执行。

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

任何想法表示赞赏!

【问题讨论】:

    标签: java eclipse groovy remote-debugging sling


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。 suspend=y 向我展示了调试选项正在工作(因为它等待 Eclipse 开始调试,然后成功启动)。所以看起来问题出在 Groovy 上。您的预编译建议很好,但我很确定我的 Groovy 代码正在被预编译 - 当然 Maven 构建输出声称它正在编译它们。
    • 另外,请确保您的 groovy 源代码包含在 Eclipse 中远程启动配置的源代码查找路径中。
    • 它们不是,好点 - 但它们现在是,即使在清理和重新部署之后它仍然没有调试。
    • 是否有机会在 Java 类中设置断点,然后单步执行 Groovy 代码?
    • 我没有调用 Groovy 代码的任何 Java 类,但有趣的是,当我在 Java 中遇到断点并退出(返回调用它的 Groovy 代码)时,它声称源文件不可用 - 即使我已将 Groovy 源文件添加到启动配置中的源查找路径。
    最近更新 更多