STS 2.5.1 中的全新 Groovy 调试支持

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

我们在最近发布的 SpringSource Tool Suite 2.5.1 中包含了一些 Groovy 调试的重大改进。一直可以使用 Eclipse 的 vanilla 调试支持来调试您的 Groovy 应用程序,但由于 Groovy 与 Java 的语言差异及其元编程,许多调试功能的效果不如预期。

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

单步进入

通过增强的 Groovy 调试支持,“单步进入”命令的工作方式与您期望的完全一致。过去,由于 Groovy 广泛使用反射和缓存的调用站点,有时会进入不感兴趣的堆栈帧,而可能会跳过感兴趣的堆栈帧,这使得调试有时会令人不愉快。

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

可以在“Groovy -> 调试器 -> 扩展调试支持”首选项页面中禁用此支持

调试时评估 Groovy 代码

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

在“显示视图”中

在“表达式视图”中

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

如果您需要禁用此支持,也可以从“Groovy -> 调试器 -> 扩展调试支持”首选项页面中执行此操作

几乎所有内容

您在调试应用程序中可以执行的任何操作都应该可以从“显示视图”中执行,除了定义新的类、方法、属性和闭包。 Groovy 是一种大型语言,并且在不断发展。可能还有其他语言功能尚未得到支持,但基本功能(包括变量定义、循环、条件语句和 gstring 列表和映射文字)都可以在评估中使用。

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

并循环遍历集合

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

Groovy Metaobject Protocol 或 MOP 提供了一种结构化的方式来更改 Groovy 的语义,方法是让最终用户控制方法调用和属性访问。新的 Groovy 调试支持的核心依赖于 Groovy MOP 进行代码评估。运作方式如下:

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

这使我们几乎可以完全控制 STS 运行实例中的调试应用程序。 我们感到惊讶和印象深刻的是,Groovy MOP 足够强大,可以用于在远程应用程序上执行 Groovy 脚本。

如果您有任何意见、功能请求或任何对您不起作用的东西,请 提出一个 jira 问题 或者在 SpringSource Tool Suite 论坛上提及它。

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

更上一层楼

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部