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

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

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

这迫使我在String b = "bar";之后添加一个noop语句String b = "bar"; 只是这样我才能看到b包含的内容。 我也不能在结束时添加断点}我认为这可能是相关的问题。

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

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

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

带有简单方法断点的示例代码

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

修改断点

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

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

在断点视图中退出断点

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

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

调试器停止了

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

退出之前的变量

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

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

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

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

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

然后最后两个括号不能断点,但DoThingDoOtherThing可以。 合理?

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

如果它设置了相同的类属性,那么当您从此调用返回时,您可以看到它,并且您具有此方法所操作的对象。

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