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

5

我正在努力调试一个构建为Sling bundle的应用程序。该应用程序几乎完全由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”,指向我的项目,连接类型为“标准(Socket Attach)”,主机名为localhost,端口号为30303。这个配置看起来启动正常——至少,我没有收到任何反馈表明它没有启动——但是我在Groovy代码中设置的断点实际上并没有停止Sling应用程序的请求执行。

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

欢迎提出任何想法!

1个回答

4
首先,我有一个建议。在您的Xrunjdwp:transport选项中设置。这将在主函数中暂停,并且会让您更好地了解您的问题是与调试选项还是Groovy代码有关。
现在,我们来看一些更加复杂的内容。没错。关于远程Groovy代码的调试,存在一些问题。通常的问题出现在动态加载Groovy代码的情况下。在这种情况下,调试名称通常与源名称不匹配,调试器无法将动态加载的类文件与原始源代码进行匹配。
其中一个问题在这里描述(还有其他类似问题的地方): https://jira.springsource.org/browse/SPR-7113 因此,我的建议是,在将Groovy代码发送到服务器之前,如果可能的话,请确保进行预编译。(同时设置)。

1
谢谢。suspend=y 选项告诉我调试选项正在工作(它等待Eclipse开始调试,然后成功启动)。因此看起来问题出在Groovy上。您的预编译建议很好,但我相当确定我的Groovy代码已经被预编译了 - 至少Maven构建输出声称正在编译它们。 - Nick Golding
他们之前不是,这是个好观点 - 但现在他们是了,即使进行了清理和重新部署后仍然无法调试。 - Nick Golding
嗯...听起来很像你在原始答案中提到的命名问题,但我确信这些类在安装之前已经被编译了。我会仔细检查一下。感谢迄今为止的帮助! - Nick Golding
你有没有碰巧解决这个问题? - justin
抱歉,Justin,我没有看到你的问题!最终我想我已经解决了这个问题 - 我认为可能是Eclipse没有将我的项目识别为Groovy项目,一旦我做到了它就可以正常工作了?但我不是100%确定,抱歉 - 在这个问题之后不久我转向了一个新项目,我无法回忆起我离开时的状态 :-( - Nick Golding
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接