我真的想为这个问题提供一个最小的工作示例,但我没有成功创建一个。因此,我将描述正在发生的事情,并希望有人可以提供帮助。
在我的代码的某处,我有以下几行:
long i = 0;
while (this.someField != null) {
this.someField = null;
i++;
}
long j = i;
(此代码是我已经完成的大量调试的结果,用于查找问题的原因。)
此代码部署在WebLogic应用程序服务器上。我在while
循环之前设置了断点。我用IntelliJ远程调试代码。
当代码命中断点时,我会一步一步地执行它。代码只是循环遍历while
循环,但someField
永远不会变为null
。所以我在循环之后的行处设置了第二个断点,然后点击 continue 。代码立即退出循环并停在此行。我可以告诉我没有更多的循环执行,因为我之后会检查i
。但是,this.someField
仍然不为空。我多次尝试过,所以我很确定代码继续执行循环的原因是我正在调试它。
我不知道如何调试此问题。我的观察没有任何意义(除非我应用量子力学)。什么可能导致这种行为?这是我的JVM中的错误吗?调试器中的错误?还有别的吗?
编辑:
该字段声明如下:
private Vector<KeyValuePair> someField = null;
它是私有的,我确保通过在所有使用它的方法上设置断点来改变另一个线程。
答案 0 :(得分:0)
这似乎是IntelliJ调试器的问题。调试器在调试时设置值,控制流根据此修改进行更改。当我使用Eclipse调试器时,问题就消失了。