无法断开Eclipse中代码块的最后一个语句

rta*_*anu 12 java eclipse debugging breakpoints

if (true) {
    String a = "foo";
    String b = "bar";
}
Run Code Online (Sandbox Code Playgroud)

如果我在String a = "foo";eclipse中设置断点将停止,我可以跳过并查看a变量窗口内的值.但我不能跨越第二个声明,它只是离开代码块而我从未看到它的价值b.

这迫使我添加一个noop声明,String b = "bar";因此我可以看到b包含的内容.我也不能在收盘时添加一个断点},我认为这可能是相关的问题.

我知道Visual Studio允许这样做,所以在Eclipse中有没有办法做到这一点?

Ste*_*ell 16

在任意块的末尾设置断点是不可能的(没有字节码黑客攻击).

如果它是一个方法体,那么它可能的:你可以设置一个方法断点.通过双击方法定义行来执行此操作:

使用简单方法断点的示例代码

(注意小箭头?)然后在断点视图中,选择断点以在显示的属性中查看a EntryExit选项复选框:

修改断点

小箭头表示默认情况下,我们在方法的入口处设置了断点.

现在选择Exit(并取消选择Entry),您将在断点视图中看到:

在断点视图中退出断点

(有一个不同的小箭头,表示退出断点.)

现在在这个小破坏程序('Debug As a Java Application')上运行调试器,它将在方法的退出括号上停止:

调试器停止了

a现在可以在Variables视图中看到局部变量(仅在这种情况下)(使用正确的值):

退出之前的变量

值得注意的是,这种类型的断点陷阱方法会退出,但这种情况会发生 - 例如,如果我们通过抛出异常退出.


小智 -1

老实说,我不确定您的 Eclipse 安装中发生了什么。我正在使用 Java 工作,并且尝试了我能想到的一切。我在最后一行检查了断点的静态方法,}它工作得很好。我检查了同样的非静态方法。

它以这种方式分解:您不能在大括号末端断点,但它将默认为大括号下的任何内容(逐行)。所以如果你有一个嵌套函数:

public int DoesStuff(int x, int y) {
    if(x > y) {
        DoThing;
    }
    else {
        DoOtherThing;
    }
}
Run Code Online (Sandbox Code Playgroud)

那么最后两个大括号不能断点,但DoThing可以DoOtherThing。合理?