0

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

 booleanTest = !booleanTest;

当我第一次启动程序时效果很好。每次循环时,布尔值都会切换到相反的状态,Eclipse 会在“变量”窗口中正确显示其值。

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

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

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

为了踢球,我只是用第三个语句尝试了这个:

 booleanTest = (booleanTest ? false : true);

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

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

一段时间以来我见过的最奇怪的事情。这是 100% 可重现的。我已经在我的笔记本电脑和我的主机上完成了它。

有人有想法么?谢谢!

4

0 回答 0