Was ist der Unterschied zwischen Step Into und Step Over im Eclipse-Debugger?

194

Ich möchte den gesamten Ablauf eines Java-Programms debuggen. Was ist der Unterschied zwischen F5(Schritt in) und F6(Schritt über) in Eclipse?

JavaUser
quelle
FWIW die gleiche Logik von Schritt über / Schritt in gilt für Xcode / Swift
Honey

Antworten:

270

Betrachten Sie den folgenden Code mit Ihrem aktuellen Anweisungszeiger (der Zeile, die als nächstes ausgeführt wird, angezeigt durch ->) in der f(x)Zeile in g(), die von der g(2)Zeile in aufgerufen wurde 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
    }
}

Wenn Sie Schritt sind in an diesem Punkt, werden Sie auf die bewegen println()Linie in f(), in den Funktionsaufruf zu treten.

Wenn Sie zu Schritt sind über an diesem Punkt, werden Sie auf die bewegen f(1)Linie in g(), über den Funktionsaufruf zu treten.

Eine weitere nützliche Funktion von Debuggern ist das Step- out oder Step- Return. In diesem Fall führt Sie eine Schrittrückgabe im Grunde genommen durch die aktuelle Funktion, bis Sie eine Ebene höher gehen. Mit anderen Worten, es wird durchlaufen f(x)und f(1)dann zur aufrufenden Funktion zurückkehren, um bei g(3)in zu landen main().

Eclipse (zumindest Europa, das derzeit das einzige ist, das ich zur Hand habe) verwendet F5für step into, F6für step overund F7für step return.

paxdiablo
quelle
1
"dann zurück zur aufrufenden Funktion, um bei zu landen g(3); in main()" <- Gehen Sie davon aus, dass Sie von Ihrem aktuellen Standort aus g(2)angekommen sind und wenn Sie fertig sind, kehren Sie zur nächsten Zeile zurück g(3)?
Honey
1
@Honey, ja, da gab es einige Unklarheiten (ob g(2)oder g(3)Anruf gerade aktiv ist), also habe ich das im ersten Absatz geklärt. Danke für die Warnung.
Paxdiablo
144

Hier sind die üblichen Szenarien beim Debuggen von Codezeilen:

  • ( Schritt in ) Eine Methode wird gerade aufgerufen, und Sie möchten den Code dieser Methode debuggen. Der nächste Schritt besteht darin, in diese Methode einzusteigen und das Debuggen Schritt für Schritt fortzusetzen.
  • ( Schritt über ) Eine Methode wird gerade aufgerufen, aber Sie sind nicht daran interessiert, diesen bestimmten Aufruf zu debuggen. Daher möchten Sie, dass der Debugger diese Methode vollständig als einen ganzen Schritt ausführt.
  • ( Schritt zurück ) Sie haben das Debuggen dieser Methode Schritt für Schritt abgeschlossen und möchten nur, dass der Debugger die gesamte Methode ausführt, bis sie als ein ganzer Schritt zurückkehrt.
  • ( Fortsetzen ) Sie möchten, dass der Debugger die "normale" Ausführung anstelle von Schritt für Schritt fortsetzt
  • ( Zeilenumbruchpunkt ) Es ist Ihnen egal, wie es dort hingekommen ist, aber wenn die Ausführung eine bestimmte Codezeile erreicht, soll der Debugger die Ausführung dort vorübergehend anhalten, damit Sie entscheiden können, was zu tun ist.

Eclipse verfügt über weitere erweiterte Debugging-Funktionen, die jedoch die grundlegenden Grundlagen darstellen.

Siehe auch

Polygenschmierstoffe
quelle
22

step into wird in Methodenaufrufe graben.
step over führt einfach die Zeile aus und geht zum nächsten über

Jean-Bernard Pellerin
quelle
1
Wie wäre es mit "aussteigen"?
Koray Tugay
5

Sie können die Details der Methode nicht mit dem Step-Over durchgehen. Wenn Sie die aktuelle Zeile überspringen möchten, können Sie den Schritt über verwenden. Dann müssen Sie nur einmal die Taste drücken F6, um zur nächsten Zeile zu gelangen. Und wenn Sie der Meinung sind, dass etwas in der Methode nicht stimmt F5, überprüfen Sie die Details.

Wanana
quelle
Wenn ich also übersteige und die Funktion eine Druckanweisung enthält, wird der Druck ausgeführt oder nicht?
Benutzername_4567
2

Schritt in Der nächste Ausdruck in der aktuell ausgewählten auszuführenden Zeile wird aufgerufen, und die Ausführung wird in der nächsten ausführbaren Zeile der aufgerufenen Methode angehalten.

Step Over Die aktuell ausgewählte Zeile wird ausgeführt und in der nächsten ausführbaren Zeile angehalten.

Yogesh Yadav
quelle