STS 2.5.1 中新的 Groovy 调试支持

工程 | Andrew Eisenberg | 2010年11月30日 | ...

在最近发布的 SpringSource Tool Suite 2.5.1 中,我们对 Groovy 调试进行了重大改进。一直以来,都可以使用 Eclipse 对 Java 的标准调试支持来调试 Groovy 应用程序,但由于 Groovy 与 Java 的语言差异及其元编程,许多调试功能一直未能正常工作。

这篇文章中的所有截图都来自一个简单的 Grails 应用程序,因此此处的调试功能隐含地利用了动态添加的 Groovy 方法和属性。

步进

通过增强的 Groovy 调试支持,“步入”命令的运行方式与您预期的一模一样。过去,由于 Groovy 大量使用反射和缓存的调用站点,有时会步入不感兴趣的堆栈帧,而可能会步过感兴趣的堆栈帧,这使得调试体验有时令人不快。

现在,可以步入 Groovy 方法和闭包,同时忽略所有不感兴趣的 Groovy 运行时和框架调用

可以通过 Groovy -> 调试器 -> 扩展调试支持首选项页面禁用此支持

在调试时评估 Groovy 代码

当调试器停止在 Groovy 堆栈帧上时,显示视图和表达式视图现在可以识别 Groovy 语法,并完全访问 Groovy 动态添加的方法和属性。

在显示视图中

在表达式视图中

甚至在编辑器中(通过选择代码片段并使用 CTRL-Shift-I 键盘快捷键)

如果您需要禁用此支持,也可以通过 Groovy -> 调试器 -> 扩展调试支持首选项页面进行操作

几乎所有

您在调试应用程序中可以做的任何事情都应该可以通过显示视图实现,嗯,几乎所有事情,除了定义新的类、方法、属性和闭包。Groovy 是一种大型语言,并且在不断发展。可能还有其他尚未支持的语言特性,但基本功能,包括变量定义、循环、条件语句以及 gstring 列表和映射字面量,都可以在评估中使用。

例如,可以添加 Grails 领域类的新实例

并遍历集合

也许是 Groovy MOP 最奇怪的用法(关于实现的简要说明)

Groovy 元对象协议 (MOP) 提供了一种结构化的方式来改变 Groovy 的语义,通过让最终用户控制方法调用和属性访问。新的 Groovy 调试支持的核心依赖于 Groovy MOP 进行代码评估。其工作原理如下:

  • 在每次评估之前,选定的 Groovy 代码会被编译成正在运行的 STS 实例中的脚本(而不是调试的应用程序)。
  • 此脚本和脚本中引用的所有类的元类都会更改为 Java 调试接口 (JDI) 元类。JDI 定义了一种协议,用于调试器通过套接字与调试应用程序通信。
  • 通过 JDI,这些元类会取代所有方法调用、属性访问和构造函数调用,以便效果发生在调试的 JVM 上,而不是本地。您可以将编译后的脚本视为一个模拟对象,它将所有操作委托给调试的应用程序。

这使我们几乎可以从正在运行的 STS 实例完全控制调试的应用程序。我们惊讶地发现 Groovy MOP 功能强大,足以用于在远程应用程序上执行 Groovy 脚本。

如果您有评论、功能请求或遇到问题,请为此提出 Jira 问题或在SpringSource Tool Suite 论坛上提及。

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有