繁体   English   中英

eclipse的检查功能像一个虚拟道具一样欺骗我,为什么在调试时似乎那么棘手?

[英]Inspect function of eclipse tricks me like a dummy, why does it seem to be that tricky while debugging?

Eclipse对于编写Java程序非常有用,但是今天我发现,欺骗像我这样的新程序员真是太棒了。 @ _ @

我写如下代码

public static void main(String[] args) {
    for(int i=0;i<3;i++){
        System.out.println("i = " + i);
    }
}

然后在“ System.out.print ....”行添加一个断点,单击“调试”按钮,蚀转到“调试”透视图,并突出显示该断点行,然后将光标移到变量上“ i”,其值是预期的“ 0”。

然后,选择“ i ++”并单击“检查”(或按“ Ctrl + Shift + I”)一次,将光标移到变量“ i”上,其值更改为“ 1”。 再次重复“检查”,i的值更改为“ 2” ......(每次单击“检查”时,其值将加1)!

为什么会这样呢? 我只想观察“ i”的值作为调试的依据,在进入下一条语句之前,不要真正更改它的值。 我认为“检查”以及“显示”仅用于查看变量/表达式,它们不应影响值,但是在这种情况下,它不能按我预期的那样工作。

谁能告诉我出了什么问题?

My eclipse version info:
Version: Indigo Service Release 2
Build id: 20120216-1857

选择“ i ++”,然后单击“检查”

如果检查表达式,则eclipse必须执行该表达式,以便获取值。 因此,如果您检查i++ ,则eclipse会向i添加一个。

这样考虑:如果不是i ++,而是检查了myFunction(i) ,您希望eclipse执行函数“ myFunction”来获取值吗? i++相同。

在eclipse中,如果您检查一个表达式,则Eclipse执行该表达式并为您提供结果。
因此,在您的情况下,如果您检查i++则蚀执行它并增加i的值。 运行此命令将使i值递增。

如果您担心在调试时显示/显示值,并且希望确保不影响该值,则应选择变量或表达式并使用“监视”选项。

这将跟踪变量/表达式的值而不执行,仅在每次运行时更新新值。 我认为这是最安全的方法。

正如Pablo所提到的,它必须评估代码以便告诉您它返回什么值。 您可以改为将手表放在“ i + 1”上,这将为您提供所需的值,而不会带来您不希望的副作用。

基本上,您需要知道任何启动的副作用,无论是从“主”代码还是从调试工具。 正如Erhannis提到的,这有时在调试代码时修改值非常有用。 (例如,在实际调整代码之前,您可以验证调整/修复确实有帮助。)

您原本希望有一个“隔离区”,但这很难做到,尤其是在面向对象的上下文中,其中许多对象链接到许多其他对象。 并行运行整个事情有时可能会起作用,但是您将失去上面的调整能力。 在任何情况下,您在争夺资源时都会遇到很多问题; 例如,两个副本都试图读取/写入特定文件,例如日志文件。 同样,两个执行路径可能会有所不同,从而导致错误/错误的监视值。

因此,在这里预防这种副作用并不是真正可行的选择,反而很少有用。 只期望手表可以反映并影响代码执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM