JDB - Pas à pas

Ce chapitre explique comment utiliser le concept de Pas à pas dans le débogage d'un programme. Le pas à pas est la fonction de débogage qui vous permet d'exécuter le code en parcourant ligne par ligne. Grâce à cela, vous pouvez examiner chaque ligne du code pour vous assurer qu'elles se comportent comme prévu.

Les commandes suivantes sont utilisées dans le processus pas à pas:

  • step: étapes vers la ligne d'exécution suivante
  • list: examine où vous vous trouvez dans le code
  • cont: continue l'exécution restante

Exemple

L'exemple suivant utilise la classe Add que nous avons utilisée dans le chapitre précédent:

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);
   }
}

Enregistrez le fichier ci-dessus sous Add.java. Compilez ce fichier à l'aide de la commande suivante:

\>javac Add.java

Supposons que le point d'arrêt soit défini sur la méthode main () de la classe Add. Les étapes suivantes montrent comment appliquer la procédure pas à pas dans la classe Add.

Étape 1: Exécuter le travail

La commande suivante démarre l'exécution de la classe nommée Add.

> run Add

Si vous exécutez cette commande, vous obtenez la sortie suivante. Dans cette sortie, vous pouvez constater que l'exécution s'arrête à la position du point d'arrêt, c'est-à-dire à la méthode main ().

L'exécution s'arrête à la première ligne de la méthode principale, c'est-à-dire à "int a = 5, b = 6;" ou Ligne no: 11 dans le code. Vous pouvez observer ces informations dans la sortie.

Étape 2: parcourir le code

La commande suivante fait passer l'exécution à la ligne suivante.

main[1] step

Maintenant, les étapes d'exécution à la ligne no: 12. Vous obtenez de voir la sortie suivante.

Étape 3: Listez le code

La commande suivante répertorie le code:

main[1] list

Vous obtenez la sortie suivante. La commande List est utilisée pour vous indiquer la ligne du code jusqu'à laquelle le contrôle de programme a atteint. Notez la flèche => dans la capture d'écran suivante qui montre la position actuelle du contrôle du programme.

Étape 4: Poursuivre l'exécution

La commande suivante continue d'exécuter le code:

main[1] cont

Cette commande continue d'exécuter les lignes restantes du code. La sortie est comme indiqué ci-dessous:

> Add:11
The application exited
\>

Généralement, il existe trois types de progression:

  • Entrer dans
  • Enjamber
  • Sors

Entrer dans

En utilisant cette commande, vous pouvez passer à la ligne suivante du code. Si la ligne suivante du code est un appel de fonction, alors il entre dans la fonction en pilotant la commande sur la ligne supérieure de la fonction.

Dans le code suivant, la flèche définit le contrôleur dans le 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);
   }
}

Si vous utilisez le step intocommande, le contrôleur passe à la ligne suivante, c'est-à-dire "int c = ob.addition (a, b);". Sur cette ligne, il y a un appel de fonctionaddition(int, int) par conséquent, le contrôleur se déplace vers la ligne supérieure de la fonction d'addition avec la flèche comme indiqué ci-dessous:

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);
   }
}

Enjamber

Step Over exécute également la ligne suivante. Mais si la ligne suivante est un appel de fonction, elle exécute cette fonction en arrière-plan et renvoie le résultat.

Prenons un exemple. Dans le code suivant, la flèche définit le contrôle dans le 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);
   }
}

Si vous utilisez le step overcommande, le contrôle passe à la ligne suivante, c'est-à-dire "int c = ob.addition (a, b);". Dans cette ligne, il y a un appel de fonctionaddition(int, int) par conséquent, l'exécution de la fonction se fait en arrière-plan et le résultat est renvoyé à la ligne actuelle avec la flèche comme indiqué ci-dessous:

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);
   }
}

Sors

Step Out exécute la ligne suivante. Si la ligne suivante est un appel de fonction, elle l'ignore et l'exécution de la fonction continue avec les lignes restantes du code.

Prenons un exemple. Dans le code suivant, la flèche définit le contrôleur dans le 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);
   }
}

Si vous utilisez le step outcommande, le contrôleur passe à la ligne suivante, c'est-à-dire "int c = ob.addition (a, b);". Dans cette ligne, il y a un appel de fonctionaddition(int, int) par conséquent, l'exécution de la fonction est ignorée et l'exécution restante continue avec la flèche comme indiqué ci-dessous:

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);
   }
}