1

EclipseはJavaプログラムを作成するのに最適ですが、今日、私のような新しいコーダーをだますのは素晴らしいと思います。@ _ @

私は次のようにスニペットを書きます、

public static void main(String[] args) {
    for(int i=0;i<3;i++){
        System.out.println("i = " + i);
    }
}

次に、「System.out.print ....」の行にブレークポイントを追加し、「Debug」ボタンをクリックします。Eclipseが「Debug」パースペクティブに移動し、ブレークポイントの行が強調表示されます。次に、変数の上にカーソルを移動します。 「i」、その値は予想通り「0」です。

次に、「i ++」を選択して「検査」(または「Ctrl + Shift + I」を押す)を1回クリックし、変数「i」の上にカーソルを移動すると、その値が「1」に変わります。もう一度「検査」を繰り返すと、値が「2」に変わります……(「検査」をクリックするたびに値が1ずつ加算されます)!!

なぜこれが起こったのですか!?デバッグの目的で「i」の値を監視したいだけです。次のステートメントに進むまで、その値を実際に変更したくありません。「検査」と「表示」は変数/式を表示するためだけのものであり、値に影響を与えるべきではないと思いますが、この場合、期待どおりに機能しません。

誰かが何が悪かったのか教えてもらえますか?

My eclipse version info:
Version: Indigo Service Release 2
Build id: 20120216-1857

選択する

4

4 に答える 4

3

式を検査する場合、eclipseはその式を実行して、値を取得できるようにする必要があります。したがって、を調べるi++と、eclipseはに1を追加しiます。

このように考えてください。i++の代わりに検査myFunction(i)した場合、eclipseが関数「myFunction」を実行して値を取得することを期待しますか?と同じi++です。

于 2012-11-09T11:37:27.833 に答える
1

デバッグ中に値を表示/表示することに懸念があり、値に影響を与えないようにしたい場合は、変数または式を選択して[監視]オプションを使用する必要があります。

これにより、実行せずに変数/式の値が追跡され、実行されるたびに新しい値が更新されます。最も安全な方法だと思います。

于 2012-11-09T13:03:38.503 に答える
1

Eclipseでは、式を検査すると、Eclipseはその式を実行し、結果を返します。
したがって、あなたの場合、検査しi++てからEclipseで実行し、の値をインクリメントしますi。これを実行する回数だけ、値が増加しますi

于 2012-11-09T11:42:02.567 に答える
0

Pabloが述べたように、コードがどのような値を返すかを示すために、コードを評価する必要があります。代わりに「i+1」に時計を置くことができ、それはあなたが望まない副作用なしにあなたが望む価値をあなたに与えるでしょう。

基本的に、「メイン」コードからであれ、デバッグツールからであれ、起動するものの副作用に注意する必要があります。Erhannisが述べたように、これはコードのデバッグ中に値を変更する場合に非常に役立ちます。(たとえば、実際にコードを微調整する前に、微調整/修正が実際に役立つことを確認できます。)

「分離領域」を期待していましたが、特に多くのオブジェクトが他の多くのオブジェクトにリンクされているオブジェクト指向のコンテキストでは、これを行うのは非常に困難です。すべてを並行して実行するとうまくいく場合がありますが、上記の微調整機能は失われます。そして、どのような状況でも、リソースをめぐって争うことで多くの問題に遭遇するでしょう。たとえば、両方のコピーがログファイルなどの特定のファイルの読み取り/書き込みを試みます。また、2つの実行パスが分岐し、誤った/誤解を招くウォッチ値につながる可能性があります。

したがって、このような副作用を防ぐことは、ここでは実際には実行可能なオプションではなく、とにかく役立つことはめったにありません。ウォッチがコードの実行を反映し、影響を与える可能性があることを期待してください。

于 2014-06-19T23:03:59.153 に答える