Eclipse ADT:不可思议的奇怪的布尔行为

时间:2013-05-08 06:42:18

标签: eclipse debugging boolean toggle adt

我在调试模式下的断点处更改变量值时遇到问题。作为测试,我有一个带有布尔值的简单循环,每次传递都会切换:

 booleanTest = !booleanTest;

首次启动程序时效果很好。每次循环时,布尔值都会切换到相反的状态,Eclipse会在Variables窗口中正确显示其值。

所以我决定在Variables窗口中更改它的值。在这种情况下,当它成立时我抓住它,所以我将其切换为false(变量窗口提供了带有这两个选项的下拉菜单,因此我知道它将其识别为布尔值)。那时,变量STOPS TOGGLING。那不是拼写错误。尽管代码在同一调试会话期间完美运行,但它在循环的每次迭代时都保持为假。

这是最好的部分:如果我在“变量”窗口中手动选择“真实”选项,它将翻转为真 - 并再次开始正确切换!

我唯一可以想象会导致这种行为的是Eclipse调试器对“false”意味着什么的想法与Eclipse编译器的想法不同。通常false为零,因为所有位都被清除。我不知道Java如何实现“!”运算符(文档称它“反转布尔值”),但如果它是所有位的XOR,那么错误的“假”可能会反转为未被识别为“真”的东西。我承认这是一个范围,但我无法解释我所看到的。

对于踢球,我只是用三级声明尝试了这个:

 booleanTest = (booleanTest ? false : true);

...看看完全不同的方法是否有所作为。事实并非如此,行为完全相同。如果我手动将booleanTest设置为true,则上面的代码不会切换它。将其设置为false并完美切换。这是在同一个调试会话期间,我甚至不必重新启动应用程序。

我还注意到其他事情:当它正确切换时,它需要在F6(单步)键上进行两次点击,以便在从false变为true时执行该行。突出显示的行闪烁,但在第一次点击时不会移动。但是当循环的特定迭代将booleanTest从true切换为false时,只需要一个F6 - 它会立即切换并且突出显示的行会前进。

我曾经见过的最奇怪的事情。这是100%可重复的。我已经在笔记本电脑和主机上完成了它。

有人有什么想法吗?谢谢!

0 个答案:

没有答案