Eclipseデバッガーのステップインとステップオーバーの違いは何ですか?


194

Javaプログラムのフロー全体をデバッグしたい。EclipseのF5(step into)とF6(step over)の違いは何ですか?


FWIWステップオーバー/ステップインの同じロジックがXcode / Swiftに適用されます
ハニー

回答:


270

次のコードで、現在の命令ポインタ(次に実行される行、で示される->)が、f(x)行でg()呼び出されたとg(2)main()ます。

public class testprog {
    static void f (int x) {
        System.out.println ("num is " + (x+0)); // <- STEP INTO
    }

    static void g (int x) {
->      f(x); //
        f(1); // <----------------------------------- STEP OVER
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- STEP OUT OF
    }
}

あなたがステップした場合、その時点で、あなたはに移動しますprintln()内の行f()の関数呼び出しにステップイン、。

その時点でステップオーバーすると、関数呼び出しをステップオーバーして、のf(1)行に移動しg()ます。

デバッガーのもう1つの便利な機能は、ステップアウトまたはステップリターンです。その場合、ステップリターンは基本的に、1つ上のレベルに戻るまで現在の関数を実行します。言い換えるf(x)f(1)、and をステップ実行し、呼び出し元の関数に戻ってg(3)inになりmain()ます。

Eclipse(少なくともEuropa、現時点で私が唯一手に入れているもの)は、for 、for 、for を使用F5しています。step intoF6step overF7step return


1
「その後で終わるために呼び出す関数にバックアウトg(3);にmain()< -あなたはあなたに得たことを想定して現在の場所からg(2)、あなたがすべて完了したら、あなたが返すその次の行にg(3)
ハニー

1
@ハニー、はい、そこにはいくらかのあいまいさがありました(g(2)またはg(3)通話が現在アクティブかどうか)ので、最初の段落でそれをクリアしました。ヘッドアップをありがとう。
paxdiablo 2017年

144

コード行をデバッグするときの通常のシナリオは次のとおりです。

  • ステップイン)メソッドが呼び出されようとしていて、そのメソッドのコードにデバッグしたいので、次のステップはそのメソッドに移動して、ステップごとにデバッグを続行することです。
  • ステップオーバー)メソッドが呼び出されようとしているが、この特定の呼び出しのデバッグに興味がないので、デバッガーがそのメソッドを1つの完全なステップとして完全に実行するようにします。
  • ステップリターン)このメソッドのデバッグは段階的に完了し、デバッガーがメソッド全体を1つのステップ全体として戻るまで実行するだけです。
  • 再開)デバッガーにステップバイステップではなく「通常の」実行を再開させたい
  • 行ブレークポイント)どうやってそこに到達したかは気にしませんが、実行が特定のコード行に達した場合、デバッガーが一時的にそこで実行を一時停止して、何をすべきかを決定できます。

Eclipseには他にも高度なデバッグ機能がありますが、これらは基本的な基礎です。

こちらもご覧ください



5

ステップオーバーを使用してメソッドの詳細を確認することはできません。現在の行をスキップする場合は、ステップオーバーを使用できます。次に、F6を一度押すだけで次の行に移動できます。また、メソッドに問題があると思われる場合は、を使用F5して詳細を確認してください。


では、ステップオーバーして、関数に印刷ステートメントが含まれている場合、印刷が行われるかどうかはわかりますか?
username_4567

2

ステップイン現在実行されている、現在選択されている行の次の式が呼び出され、呼び出されたメソッドの次の実行可能な行で実行が中断されます。

ステップオーバー 現在選択されている行が実行され、次の実行可能な行で中断します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.