public static void main(String args[])
{
if(true)
{
int x= 3*44+7;
//int y=1;
}
}
我将问题缩小到这个简单的语句,我真的不知道如何在eclipse调试器中访问这个变量。它总是发生在if条件,try-catch语句,循环等中声明变量的情况下,并且意外地是该块中的最后一个语句。
要解决此问题,我将停止调试会话,向该块添加另一个语句,重做我刚才所做的一切。有更好的解决方案吗?
答案 0 :(得分:2)
你是对的,很难看到最后一个语句的值:当你传递最后一行时程序终止。
解决方法可以是在此语句之后添加虚拟行并在其中放置断点或使用“表达式”视图并在其中放置x
(即3*44+7
)的表达式。
答案 1 :(得分:2)
最后一个“语句”运行,只是你看不到变量结果,因为:
在此声明之前该变量不存在。
执行语句时变量不存在 - 最后一步是将结果值赋给变量。
变量将存在于下一行,但该行结束了声明变量的范围,因此该变量不再存在。
在一个更“真实世界”的例子中,你可以做这样的事情 -
变化:
public int doIt() {
return 3*44+7;
}
要:
public int doIt() {
int x = 3*44+7;
return x;
}
并在'return'行设置断点。
答案 2 :(得分:1)
我找不到任何问题的解决方案。 由于您只能看到在当前行之前定义的变量,因此显然需要在变量声明之后使用一个语句。 如果没有语句,则您的变量不再处于当前范围内(在您的情况下,您的程序结束),因此无法查询。
顺便说一句,你说你停止了调试会话。使用HotSwap,您可以动态替换当前方法的代码并在方法开头重新启动调试(请参阅调试器中的“Drop to frame”)答案 3 :(得分:1)
在您的情况下,编译器可能实际上删除了赋值,因为变量x以后从未使用过。
无论如何......您可以在调试器中使用的一种解决方法(假设您希望调试的语句不是状态更改)将使用剪贴簿,或者使用inspect。
http://www.ibm.com/developerworks/library/os-ecbug/数字7和8
你可以突出显示一个表达式(一个声明或整个声明的一部分)并检查我相信。 (几个月内没有使用过eclipse)。替代方法是停在该行(因此在表达式触发之前)并将该行复制到显示视图中,并在那里运行。
它将在当前堆栈框架内运行,因此所有本地对象都可用。 但是,运行set和其他状态更改调用实际上会更改程序的状态。 (这不是理想的,但它可以阻止调试器)