0

デバッグ モードのブレークポイントで変数値を変更できません。テストとして、パスごとに切り替えられるブール値を持つ単純なループがあります。

 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% 再現可能です。私はラップトップとメインマシンでそれを行いました。

誰にもアイデアはありますか?ありがとう!

4

0 に答える 0