web-dev-qa-db-ja.com

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

Javaプログラムのフロー全体をデバッグしたい。違いは何ですか F5 (ステップイン)および F6 (ステップオーバー)日食で?

172
JavaUser

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); // <----------------------------------- current location
        f(1); // <----------------------------------- step over
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- step out of
    }
}

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

その時点でoverをステップ実行した場合、f(1);g()行に移動し、関数呼び出しをステップオーバーします。

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

Eclipse(少なくともEuropa、これは現時点で唯一の便利なものです)を使用しています F5 step intoの場合、 F6 step overおよび F7 step returnの場合。

249
paxdiablo

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

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

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

こちらもご覧ください

126

ステップインは、メソッド呼び出しを掘り下げます
ステップオーバーすると、その行が実行されて次の行に移動します

20

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

3
wanana

Step Into実行される現在選択されている行の次の式が呼び出され、呼び出されたメソッドの次の実行可能行で実行が一時停止します。

Step Over現在選択されている行が実行され、次の実行可能な行で一時停止します。

1
shiva