调试 DSLD 脚本

工程 | Andrew Eisenberg | 2011 年 8 月 2 日 | ...

不久前,我为 Groovy-Eclipse 引入了 DSL 描述符 (DSLDs)。DSLDs 是 Groovy 脚本,为 Eclipse 工作空间中的 Groovy 项目提供丰富的编辑支持(内容辅助、导航等)。由于 DSLDs 只能在正在运行的 Eclipse 进程中执行,调试不像启动 Eclipse 调试器并单步执行 Groovy 脚本那么简单。在本文中,我将介绍一些用于调试 DSLDs 的简单和更复杂的技术。

为了使所有这些工作正常运行,您将需要最新的开发版本:

简单粗暴的方法

调试 DSLDs 最简单粗暴的方法是使用 println。这将把表达式打印到运行中的 Eclipse 进程的标准输出,如果您从命令行启动 Eclipse,就可以看到这些输出。然而,我建议改用 log 语句。这会将日志信息打印到 Groovy 事件控制台

正如您在下面的示例中看到的,每次 MethodParams.dsld 中的切点匹配时,vals 的当前值都会打印到 Groovy 事件控制台。

log 方法可以在 DSLD 脚本的任何地方使用。事件控制台中的所有日志条目都以 "======" 为前缀。Groovy 事件控制台还会显示脚本的编译错误和抛出的异常,因此即使 DSLD 脚本不包含任何 log 语句,它也相当有用。

不使用事件控制台时,最好将其关闭,因为跟踪信息可能会迅速变大,并最终消耗大量内存和处理能力。

高级方法

打印和日志语句的使用是有限的。通过设置断点、单步调试代码和执行调试评估,可以为 DSLDs 提供适当的调试支持。尽管设置有点复杂,但在调试复杂脚本时可能值得。本质上,您需要在 Eclipse 调试器中启动一个新的 Eclipse 实例(一个运行时工作台),并通过它来调试脚本。 关于 创建 使用 Eclipse 运行时工作台的信息,但其中大部分对于 DSLD 调试来说并非必需。

以下是所需的步骤:

  1. 安装 Groovy-Eclipse 源代码(可选,但有助于深入了解 DSLDs 的执行方式)。您可以从 Eclipse 的安装管理器中进行。选择 Groovy-Eclipse SDK。更多详细信息请参见此处
  2. 创建并启动一个新的空 Eclipse 工作空间。您可以通过从命令行启动 Eclipse 并使用 -data 参数指定新工作空间的路径来完成此操作。这个工作空间是宿主工作空间,它将启动第二个工作空间,您的 DSLD 实际上就在第二个工作空间中。
  3. 在新工作空间中创建一个新的 Groovy 项目,最初为空。
  4. 启动运行时工作台。首先打开启动配置对话框: 然后双击 Eclipse application 创建新的启动配置。在 Workspace Location 部分,选择包含您的 DSLD 的工作空间的文件夹路径:
  5. 运行时工作台启动后,将要调试的 DSLD 从运行时工作空间拖放到宿主工作空间中新创建的项目中。执行此操作时,您将看到一个类似以下的对话框: 请确保选择 link(链接)。链接文件将确保在一个工作空间中所做的更改会反映在另一个工作空间中。我建议使用拖放(而不是其他导入文件到工作空间的方式),因为这是确保文件是链接而非复制的最简单方法。
  6. 在宿主工作空间中,在 DSLD 的某个位置设置一个断点。
  7. 在运行时工作台中执行一些操作,以触发您的脚本。例如,将鼠标悬停在 DSLD 应用到的 Groovy 文件中的一个有趣的标识符上。
  8. Eclipse 将在断点处停止。
  9. Eclipse 第一次在断点处停止时,源代码不会出现。
    您必须明确地将新创建的 Groovy 项目添加到 Eclipse 运行时启动配置的源查找路径中。完成此操作后,源代码将可用。
  10. 恭喜!您现在应该能够使用调试器调试您的 DSLDs 了。

变量视图将正常工作:

如果您安装了 STS,可以在表达式视图中执行评估:

在显示视图中:

在编辑器中,选择一个表达式并按下 CTRL-Shift-I 或 CMD-Shift-I(本例中是 names)。

请注意,闭包不允许在评估中使用,并且必须在 Groovy -> Debugger -> Extended Debugging Support 页面中明确启用 Groovy 调试评估。

使用此方法调试 DSLD 脚本将帮助您创建更大的脚本,以支持更复杂的 Groovy DSLs。

获取 Spring 时事通讯

订阅 Spring 时事通讯,保持联系

订阅

抢先一步

VMware 提供培训和认证,助您快速提升。

了解更多

获取支持

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

了解更多

近期活动

查看 Spring 社区的所有近期活动。

查看全部