【问题标题】:Debugging iteration (closures) in Groovy with IntelliJ IDEA使用 IntelliJ IDEA 在 Groovy 中调试迭代(闭包)
【发布时间】:2013-02-26 09:41:54
【问题描述】:

我有一个混合了 Java 和 Groovy 代码的代码库。对于 Groovy 代码中的迭代,我们倾向于使用闭包:

String[] strings = ["First", "Second", "Third"]
strings.each { string ->
    println string
}

当我在 IntelliJ IDEA (v. 11) 中通过一次步进一行来调试它时,在strings.each()(即println string)中执行的代码被跳过。我可以在println 行设置一个断点,然后我就可以对其进行调试,但这是一个可以避免的小变通方法。

有没有办法将 intelliJ 配置为不跳过 Groovy 闭包?File->Settings->Debugger->Groovy 中没有适用的选项。 p>

编辑:

澄清我期望 intelliJ 做什么:

假设我有一个这样的 Java 风格迭代:

for (String string : strings) {
    println string
}

如果我使用“Step over”,调试器会毫无问题地进入迭代。我可以继续“越过”并且仍然处于循环中,直到没有更多对象可以迭代。这就是我对上述闭包的期望。

在您必须手动设置断点的一两个闭包的情况下,这可能不是问题。但是如果有很多,“自动”进入它们会很巧妙。

【问题讨论】:

  • 你在做“步入”吗? (F7快捷键)
  • @Nebelmann 如果我“进入”,我必须通过一整套 Groovy 类来设置迭代。我终于进入了循环,但到达那里仍然很麻烦。
  • 恐怕你无能为力,那么......据我所知,each 是一个闭包,所以如果你跨过它将跳过整个函数,如果你介入你将不得不处理很多“噪音”,比如在 Java 中,当你想进入 Spring bean 方法调用并最终进入代理时......在闭包的第一行设置断点是我唯一的解决方案我知道。 编辑:我刚刚发现了 IntelliJ 的 Debugger > Stepping 选项,它可以防止你在 groovy 的内部结构上苦苦挣扎……值得一试 :)
  • 真可惜。由于 intelliJ 与 Groovy 配合得非常好,我希望默认行为是进入闭包。但我明白你的意思,谢谢。
  • Nebelmann 是正确的,Step Over 会跳过一个方法调用(每个方法调用或任何其他关闭方法)并且不会进入内部。如果您有设置 |调试器 |时髦的 |不要单步执行特定的 Groovy 方法,那么 Step Into 可能会将您直接转到闭包,也可能不会,具体取决于您的 Groovy 版本。 Groovy 运行时不适用于步进过滤器:jira.codehaus.org/browse/GROOVY-4063。另见youtrack.jetbrains.com/issue/IDEA-51344

标签: debugging groovy intellij-idea closures iteration


【解决方案1】:

我完全同意 IntelliJ 中需要更好的 Closure 调试支持,因为您要求做的事情并不总是像它应该做的那样简单而无需跳过一些环节。

就像您发现的那样,您可以在println 行上放置一个断点,这通常会让您在闭包内中断(但并非总是如此)。一旦你一个断点,IntelliJ 就有一个非常强大的条件断点系统,它可以让你更好地控制何时中断。

我不时发现有用的另一条路线是将这些闭包中的所有内容放入闭包调用的方法中,而不是将代码直接放在闭包中。这不会过多地改变运行时行为,而且我发现它让我对事物有更多的控制权。这通常也表明我也需要重构,因为深入研究该代码已经太痛苦了。

【讨论】:

  • 感谢您的想法,它们很有帮助。不过,将“关闭代码”移动到一个方法中并没有真正帮助我。我真正想要的只是步入闭包,就像步入 Java 循环一样。
  • 我同意。希望 IntelliJ 开发人员会看到这篇文章,并将其作为高优先级功能添加到即将发布的版本中。我知道他们会观看 Stack Overflow,而且我知道我已经与一大堆不同的人处理过这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多