无法断开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中执行此操作?
在任意块的末尾设置断点是不可能的(没有字节码黑客攻击)。
如果它是方法体 ,则可以:您可以设置方法断点。 通过双击方法定义行来执行此操作:
( 注意小箭头? )然后在断点视图中,选择断点以在显示的属性中查看Entry
和Exit
选项复选框:
小箭头表示默认情况下,我们在方法的入口处设置了断点。
现在选择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; } }
然后最后两个括号不能断点,但DoThing
和DoOtherThing
可以。 合理?
如果结束语句是赋值并且它在局部变量上,为什么要查看它的值,因为它不再在范围内而且不能生效。
如果它设置了相同的类属性,那么当您从此调用返回时,您可以看到它,并且您具有此方法所操作的对象。
虽然这不回答问题,但我试图了解你的问题的用例。