デバッグ モードのブレークポイントで変数値を変更できません。テストとして、パスごとに切り替えられるブール値を持つ単純なループがあります。
booleanTest = !booleanTest;
プログラムを最初に起動したときにうまく機能します。ループを通過するたびに、ブール値は反対の状態に切り替わり、Eclipse はその値を [変数] ウィンドウに適切に表示します。
そこで、[変数] ウィンドウでその値を変更することにしました。この場合、true のときにキャッチしたので、false に切り替えます (Variables ウィンドウには、これら 2 つのオプションを含むドロップダウン メニューが表示されるので、ブール値として認識されます)。その時点で、変数はトグルを停止します。それはタイプミスではありません。この同じデバッグセッション中にコードが完全に機能しているにもかかわらず、ループの反復ごとに false のままです。
最良の部分は次のとおりです。[変数] ウィンドウで「true」オプションを手動で選択すると、true に戻り、再び適切にトグルし始めます!
この動作を引き起こすと私が想像できる唯一のことは、「false」が何を意味するかについての Eclipse デバッガーの考えが Eclipse コンパイラーの考えと異なる場合です。すべてのビットがクリアされるため、通常は false はゼロです。Java が "!" をどのように実装しているかわかりません。演算子(ドキュメントでは「ブール値を反転する」と書かれています)ですが、それがすべてのビットのXORである場合、間違った「偽」は「真」として認識されないものに反転する可能性があります。私はこれがリーチであることを認めますが、私が見ているものを説明するのに途方に暮れています.
キックのために、私は三次ステートメントでこれを試しました:
booleanTest = (booleanTest ? false : true);
...まったく異なるアプローチが違いを生むかどうかを確認します。そうではありません。動作はまったく同じです。手動で booleanTest を true に設定すると、上記のコードはそれを切り替えません。false に戻すと、完全に切り替わります。これは同じデバッグ セッション中です。アプリを再起動する必要さえありません。
また、別のことに気付きました。適切に切り替えている場合、false から true に移動するときに行を実行するには、F6 (シングル ステップ) キーを 2 回押す必要があります。強調表示された行は点滅しますが、最初のヒットでは移動しません。しかし、ループのその特定の繰り返しが booleanTest を true から false に切り替える場合、F6 が 1 つだけ必要です。すぐに切り替えられ、強調表示された行が進みます。
私がしばらくの間見た中で最も奇妙なもの。これは 100% 再現可能です。私はラップトップとメインマシンでそれを行いました。
誰にもアイデアはありますか?ありがとう!