Débogage avec Eclipse

1. Vue d'ensemble

Dans ce guide rapide, nous verrons comment déboguer des programmes Java à l'aide de l'IDE Eclipse.

2. Concepts de base

Eclipse prend en charge le débogage d'une application. Il visualise l'exécution étape par étape et nous aide à découvrir les bogues.

Pour illustrer les fonctionnalités de débogage d'Eclipse, nous utiliserons un exemple de programme PerfectSquareCounter . Ce programme compte le total des carrés parfaits et même des carrés parfaits sous un nombre donné:

public class PerfectSquareCounter { static int evenPerfectSquareNumbers = 0; public static void main(String[] args) { int i = 100; System.out.println("Total Perfect Squares: " + calculateCount(i)); System.out.println("Even Perfect Squares : " + evenPerfectSquareNumbers); } public static int calculateCount(int i) { int perfectSquaresCount = 0; for (int number = 1; number <= i; number++) { if (isPerfectSquare(number)) { perfectSquaresCount++; if (number % 2 == 0) { evenPerfectSquareNumbers++; } } } return perfectSquaresCount; } private static boolean isPerfectSquare(int number) { double sqrt = Math.sqrt(number); return sqrt - Math.floor(sqrt) == 0; } }

2.1. Mode débogage

Tout d'abord, nous devons démarrer le programme Java dans Eclipse en mode débogage. Ceci peut être réalisé de deux manières:

  • Faites un clic droit sur l'éditeur et sélectionnez Déboguer en tant que -> Application Java (illustré dans la capture d'écran ci-dessous)
  • Déboguer le programme à partir de la barre d'outils (mis en évidence dans la capture d'écran ci-dessous)

2.2. Points d'arrêt

Nous devons définir les points auxquels l'exécution du programme doit s'arrêter pour enquête. Ceux-ci sont appelés points d'arrêt et s'appliquent aux méthodes. Ils peuvent également être définis à tout moment avant ou pendant l'exécution.

Fondamentalement, il existe 3 façons d'ajouter des points d'arrêt au programme:

  • Faites un clic droit sur la barre de marqueurs (règle verticale) correspondant à la ligne et sélectionnez Basculer le point d'arrêt (illustré dans la capture d'écran ci-dessous)
  • Appuyez sur Ctrl + Maj + B sur la ligne nécessaire dans l'éditeur
  • Double-cliquez sur la barre de repères (règle verticale) correspondant à la ligne nécessaire

2.3. Contrôles de flux de code

Maintenant que le débogueur s'arrête aux points d'arrêt donnés, nous pouvons poursuivre l'exécution.

Supposons que le débogueur est actuellement positionné selon la capture d'écran ci-dessous, à la ligne 16:

Les options de débogage les plus couramment utilisées sont:

  • Pas à pas (F5) - Cette opération entre dans les méthodes utilisées dans la ligne actuelle (le cas échéant); sinon, il passe à la ligne suivante. Dans cet exemple, il prendra le débogueur dans la méthode isPerfectSquare ()
  • Step Over (F6) - Cette opération traite la ligne actuelle et passe à la ligne suivante. Dans cet exemple, cela exécutera la méthode isPerfectSquare () et passera à la ligne suivante
  • Step Return (F7) - Cette opération termine la méthode actuelle et nous ramène à la méthode appelante. Puisque dans ce cas, nous avons un point d'arrêt dans la boucle, il sera toujours dans la méthode, sinon il reviendrait à la méthode principale
  • Resume (F8) - Cette opération continuera simplement avec l'exécution jusqu'à la fin du programme à moins que nous n'atteignions un autre point d'arrêt

2.4. Perspective de débogage

Lorsque nous démarrons le programme en mode débogage, Eclipse vous proposera une option pour basculer vers la perspective Débogage. La perspective Débogage est un ensemble de vues utiles qui nous aident à visualiser et à interagir avec le débogueur.

Nous pouvons également basculer manuellement vers la perspective Débogage à tout moment.

Voici quelques-unes des vues les plus utiles que cela contient:

  • Vue de débogage - Cela montre les différents threads et les traces de pile d'appels
  • Vue Variables - Ceci montre les valeurs des variables à un point donné. Si nous avons besoin de voir les variables statiques, nous devons spécifier explicitement que
  • Breakpoints - Cela montre les différents points d'arrêt et les points de surveillance (que nous verrons ci-dessous)
  • Debug Shell - Cela nous permet d'écrire et d'évaluer du code personnalisé pendant le débogage (un exemple est couvert plus tard)

3. Techniques

Dans cette section, nous allons passer en revue quelques techniques importantes qui nous aideront à maîtriser le débogage dans Eclipse.

3.1. Variables

We can see the values of variables during the execution under the Variables view. In order to see the static variables, we can select the drop-down option Java -> Show Static Variables.

Using the variables view, it's possible to change any value to the desired value during the execution.

For example, if we need to skip a few numbers and directly start with the number 80, we could do that by changing the value of the variable number:

3.2. Inspecting Values

If we need to inspect the value of a Java expression or statement, we can select the particular expression in the editor, right-click, and Inspect, as shown below. A handy shortcut is to hit Ctrl+Shift+I on the expression to see the value:

In case we need to permanently inspect this expression, we can right-click and Watch. Now, this gets added to the Expressions view and the value of this expression can be seen for different runs.

3.3. Debug Shell

In the context of the debugging session, we can write and run custom code to evaluate possibilities. This is done in the Debug Shell.

For example, if we need to cross-check the correctness of the sqrt functionality, we could do it in the Debug Shell. On the code, Right-click -> Inspect to see the value:

3.4. Conditional Breakpoints

There will be cases in which we want to debug only for specific conditions. We can achieve this by adding conditions to a breakpoint in one of two ways:

  • Right-click on the breakpoint and choose Breakpoint Properties
  • In Breakpoint view, select the breakpoint and specify the condition

For example, we can specify the breakpoint to suspend the execution only if number is equal to 10:

3.5. Watchpoints

Whatbreakpoints are for methods, watchpoints are for class-level variables. In this current example, the breakpoint on evenPerfectSquareNumbers declaration is called a watchpoint. Now, the debugger will pause the execution every time the field is accessed or modified on a watchpoint.

This is the default behavior, which can be changed in the watchpoint's properties.

In this example, the debugger will stop execution every time a perfect square is an even number:

3.6. Trigger Points

Let's assume that we're debugging a complex issue in an application with a huge amount of source code. The debugger will keep suspending the flow due to scattered breakpoints.

When a breakpoint is marked as a trigger point, it means that the rest of the breakpoints will be enabled only if this breakpoint is hit.

For example, in the screenshot below, the breakpoint on isPerfectSquare() is supposed to be hit for every iteration in the loop. However, we've specified the breakpoint on calculateCount() method as a trigger point, along with a condition.

So, when the iteration count reaches 10, this will trigger the rest of the breakpoints. Hence, from now on, if the breakpoint on isPerfectSquare() is hit, the execution will get suspended:

3.7. Remote Debugging

Enfin, si l'application s'exécute en dehors d'Eclipse, nous pouvons toujours utiliser toutes les fonctionnalités ci-dessus, à condition que l'application distante autorise le débogage. À partir d'Eclipse, nous sélectionnerions Debug comme application Java distante .

4. Conclusion

Dans ce guide rapide, nous avons vu les bases et les différentes techniques de débogage des programmes dans Eclipse IDE.

Comme toujours, le code source utilisé dans cet exercice est disponible à l'adresse over sur GitHub.