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 Newsletter

通过 Spring Newsletter 保持联系

订阅

领先一步

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

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部