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

时间:2011-10-16 17:06:57

标签: java eclipse debugging breakpoints

if (true) {
    String a = "foo";
    String b = "bar";
}

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

这迫使我在String b = "bar";之后添加一个noop语句,这样我才能看到b包含的内容。我也无法在收盘}上添加断点,我认为这可能是相关问题。

我知道Visual Studio允许这样做,所以有没有办法在Eclipse中执行此操作?

4 个答案:

答案 0 :(得分:15)

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

如果它是方法主体,那么它 可能:您可以设置方法断点。通过双击方法定义行来执行此操作:

sample code with simple method breakpoint

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

modifying the breakpoint

小箭头表示默认情况下,我们在方法的条目上设置了一个断点。

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

exit breakpoint in breakpoints view

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

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

debugger stopped

并且 Variables 视图中的局部变量(在这种情况下仅a)现在可见(具有正确的值):

variables just before exit

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

答案 1 :(得分:4)

您可以突出显示作业右侧的表达式,然后按 Ctrl + Shift + I (对于'inspect'我认为)。它将评估表达式并为您提供结果。这样,您可以在分配后知道b的值而不需要断点。

答案 2 :(得分:-1)

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

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

public int DoesStuff(int x, int y) {
    if(x > y) {
        DoThing;
    }
    else {
        DoOtherThing;
    }
}

然后最后两个大括号不能断点,但DoThingDoOtherThing可以。有意义吗?

答案 3 :(得分:-1)

如果结束语句是赋值并且它在局部变量上,为什么要查看它的值,因为它不再在范围内而且不能生效。

如果它设置了相同的类属性,那么当你从这个调用返回时你可以看到它并且你有这个方法运行的对象。

虽然这不能回答问题,但我试图了解您问题的用例。