使用 IntelliJ IDEA 在 Groovy 中调试迭代(闭包)

标签 debugging groovy intellij-idea closures iteration

我有一个混合 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 中没有适用的选项。

编辑:

澄清我希望 IntelliJ 做什么:

假设我有一个像这样的 Java 风格迭代:
for (String string : strings) {
    println string
}

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

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

最佳答案

我完全同意 IntelliJ 中需要更好的 Closure 调试支持,因为您要求做的事情并不总是像不跳过一些障碍一样简单。

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

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

关于使用 IntelliJ IDEA 在 Groovy 中调试迭代(闭包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334766/

相关文章:

c++ - 尝试研究时消失的错误

debugging - 在 TYPO3 CMS 中调试 Typoscript 的最佳方法是什么?

groovy - Jenkins boolean 参数在 groovy 中始终为真

java - 使用STS框架在jdbcTemplate中进行求和运算

android - 如果应用程序在 Android 中崩溃,如何解决该问题?

sql - 在Gradle中使用Groovy执行SQL文件

java - Mac 上 IntelliJ ide 中出现错误 "class not found"

java - 使用 IntelliJ IDEA 批量重命名方法

java - 无法运行 IntelliJ - NoClassDefFoundError : Could not initialize class sun. awt.X11GraphicsEnvironment

ios - Xamarin iOS 7 : Native linking failed