JDB - Schritt

In diesem Kapitel wird erläutert, wie Sie das Konzept des Steppens beim Debuggen eines Programms verwenden. Stepping ist die Debugger-Funktion, mit der Sie den Code ausführen können, indem Sie zeilenweise durchlaufen. Auf diese Weise können Sie jede Zeile des Codes untersuchen, um sicherzustellen, dass sie sich wie beabsichtigt verhält.

Die folgenden Befehle werden im Schrittprozess verwendet:

  • Schritt: Schritte zur nächsten Ausführungszeile
  • Liste: Untersucht, wo Sie sich im Code befinden
  • cont: setzt die verbleibende Ausführung fort

Beispiel

Im folgenden Beispiel wird die Add-Klasse verwendet, die wir im vorherigen Kapitel verwendet haben:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

Speichern Sie die obige Datei als Add.java. Kompilieren Sie diese Datei mit dem folgenden Befehl:

\>javac Add.java

Nehmen wir an, dass der Haltepunkt auf der main () -Methode der Add-Klasse festgelegt ist. Die folgenden Schritte zeigen, wie Sie Schritte in der Add-Klasse anwenden.

Schritt 1: Führen Sie den Job aus

Der folgende Befehl startet die Ausführung der Klasse Add.

> run Add

Wenn Sie diesen Befehl ausführen, wird die folgende Ausgabe angezeigt. In dieser Ausgabe können Sie feststellen, dass die Ausführung an der Haltepunktposition, dh an der main () -Methode, stoppt.

Die Ausführung stoppt in der ersten Zeile der Hauptmethode, dh bei "int a = 5, b = 6;" oder Zeile Nr. 11 im Code. Sie können diese Informationen in der Ausgabe beobachten.

Schritt 2: Schritt durch den Code

Der folgende Befehl führt die Ausführung zur nächsten Zeile.

main[1] step

Nun geht die Ausführung zu Zeile Nr. 12 über. 12. Sie sehen die folgende Ausgabe.

Schritt 3: Listen Sie den Code auf

Der folgende Befehl listet den Code auf:

main[1] list

Sie erhalten die folgende Ausgabe. Mit dem Befehl List werden Sie über die Zeile im Code informiert, bis zu der die Programmsteuerung gelangt ist. Beachten Sie die Pfeilmarkierung => im folgenden Screenshot, die die aktuelle Position der Programmsteuerung zeigt.

Schritt 4: Setzen Sie die Ausführung fort

Der folgende Befehl führt den Code weiterhin aus:

main[1] cont

Dieser Befehl führt die Ausführung der verbleibenden Codezeilen weiter aus. Die Ausgabe ist wie folgt:

> Add:11
The application exited
\>

Im Allgemeinen gibt es drei Arten von Schritten:

  • Hineinsteigen
  • Schritt über
  • Aussteigen

Hineinsteigen

Mit diesem Befehl können Sie zur nächsten Codezeile wechseln. Wenn die nächste Zeile des Codes ein Funktionsaufruf ist, tritt er in die Funktion ein, indem die Steuerung in der obersten Zeile der Funktion angesteuert wird.

Im folgenden Code definiert die Pfeilmarkierung den Controller im Code.

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

Wenn Sie die verwenden step intoBefehl bewegt sich die Steuerung zur nächsten Zeile, dh "int c = ob.addition (a, b);". In dieser Zeile befindet sich ein Funktionsaufrufaddition(int, int) Daher bewegt sich der Controller mit der Pfeilmarkierung in die oberste Zeile der Additionsfunktion, wie unten gezeigt:

public class Add
{
   public int addition( int x, int y)
-> {
      int z = x + y;
      return z;
   }
      
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

Schritt über

Step Over führt auch die nächste Zeile aus. Wenn es sich bei der nächsten Zeile jedoch um einen Funktionsaufruf handelt, wird diese Funktion im Hintergrund ausgeführt und das Ergebnis zurückgegeben.

Nehmen wir ein Beispiel. Im folgenden Code definiert die Pfeilmarkierung das Steuerelement im Code.

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

Wenn Sie die verwenden step overBefehl bewegt sich die Steuerung zur nächsten Zeile, dh "int c = ob.addition (a, b);". In dieser Zeile gibt es einen Funktionsaufrufaddition(int, int) Daher erfolgt die Funktionsausführung im Hintergrund und das Ergebnis wird wie unten gezeigt mit der Pfeilmarkierung in die aktuelle Zeile zurückgegeben:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

Aussteigen

Step Out führt die nächste Zeile aus. Wenn es sich bei der nächsten Zeile um einen Funktionsaufruf handelt, wird dieser übersprungen und die Funktionsausführung mit den verbleibenden Zeilen des Codes fortgesetzt.

Nehmen wir ein Beispiel. Im folgenden Code definiert die Pfeilmarkierung den Controller im Code.

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

Wenn Sie die verwenden step outBefehl bewegt sich die Steuerung zur nächsten Zeile, dh "int c = ob.addition (a, b);". In dieser Zeile gibt es einen Funktionsaufrufaddition(int, int) Daher wird die Funktionsausführung übersprungen und die verbleibende Ausführung wird mit der Pfeilmarkierung fortgesetzt, wie unten gezeigt:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}