逐步调试 groovysh 中的 groovy 代码

Debugging groovy code in groovysh step by step

我是 Java 和 Groovy 的新手,这是一个关于在 groovysh 中逐步调试 groovy 代码的非常简单的问题。

$ groovysh
groovy:000> String str = "abcd"
===> abcd
groovy:000> println str
Unknown property: str

在所有其他语言的交互调试 shell 中,我能够定义一个变量并在 以下所有步骤 中使用它。如何在 groovysh?

中做到这一点

groovysh documentation page 中所定义,默认情况下所有变量都是无类型的,因此使用 def 或特定类型标识符(如 String)不起作用。在这种情况下,正确的语法只是 str = "abcd".

$ groovysh
Groovy Shell (3.0.6, JVM: 11.0.6)
Type ':help' or ':h' for help.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000> str = "abcd"
===> abcd
groovy:000> str
===> abcd
groovy:000> :S variables
Variables:
  str = abcd
  _ = abcd
===> [str:abcd, _:abcd]

正如您在上面的示例中看到的,您可以使用 :S variables 命令列出在 shell 会话中注册的所有变量。 (您可以列出在 shell window 中执行的 :h 的所有可用命令。)

但是,有一种方法可以打开类型化变量。这称为解释模式,可以使用 := interpretedMode 命令激活,如下例所示:

$ groovysh
Groovy Shell (3.0.6, JVM: 11.0.6)
Type ':help' or ':h' for help.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000> str = "abcd"
===> abcd
groovy:000> str
===> abcd
groovy:000> :S variables
Variables:
  str = abcd
  _ = abcd
===> [str:abcd, _:abcd]
groovy:000> := interpreterMode
groovy:000> String str2 = "efgh"
===> efgh
groovy:000> str2
===> efgh
groovy:000> str == str2
===> false
groovy:000> :S variables
Variables:
  str = abcd
  _ = false
  groovysh_collected_boundvars = [str2:efgh]
  str2 = efgh
===> [str:abcd, _:false, groovysh_collected_boundvars:[str2:efgh], str2:efgh]