Améliorer le Débogage 'printf'
Autres langues : English Español Deutsch 日本語 한국어 Português 中文
L’une des techniques de débogage les plus courantes, le débogage ‘printf’ est particulièrement populaire car la plupart des gens l’apprennent intuitivement lors de l’écriture de leurs premiers programmes.
Le débogage ‘printf’ est très accessible car vous n’avez besoin d’aucun outil spécial. Lorsque vous faites face à vos premiers bugs, même avant de savoir ce qu’est un débogueur, il vient naturellement à l’esprit de faire afficher les variables par votre programme étape par étape, afin de suivre l’exécution dans la console.
Bien que ce soit l’une des techniques de débogage les plus basiques, les développeurs expérimentés l’utilisent également beaucoup. Elle peut vous aider à investiguer tout type de problème, comme des routines sous-optimales, un état incohérent, des problèmes de multithreading, et plus encore.
Comme je l’ai déjà mentionné, cette technique ne nécessite pas d’outils spéciaux, comme un IDE. Cependant, si vous en utilisez un, il peut vous rendre encore plus efficace dans la journalisation de l’état du programme.
Cet article présente des fonctionnalités d’IntelliJ IDEA. Des fonctionnalités similaires peuvent ou non être disponibles dans d’autres IDE. Si vous utilisez un outil différent, pensez à consulter sa documentation pour voir si ces fonctionnalités y sont également présentes.
Live templates
IntelliJ IDEA fournit des live templates pour les modèles de journalisation de débogage les plus courants. Pour utiliser un live template pour la journalisation de débogage, entrez l’abréviation correspondante et appuyez sur Tab. IntelliJ IDEA générera l’instruction d’impression et l’insérera à l’emplacement du curseur.
Voyons quelques exemples.
Journaliser les paramètres de méthode
public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {
// type 'soutp' here, then press Tab
return null;
} public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {
System.out.println("in = " + in + ", mask = " + mask + ", newColor = " + newColor);
return null;
} Journaliser les valeurs
public static double coolMethod(double parameter) {
double a = Math.random();
double b = Math.random();
// type 'soutv' here, press Tab, then select the value
return a * b * parameter;
} public static double coolMethod(double parameter) {
double a = Math.random();
double b = Math.random();
System.out.println("b = " + b);
return a * b * parameter;
} Journaliser les entrées de méthode
public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {
// type 'soutm' here, then press Tab
return null;
} public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {
System.out.println("ImageUtils.recolor");
return null;
} Points d’arrêt de journalisation
L’un des inconvénients du débogage avec des instructions d’impression est qu’elles introduisent la charge de gestion manuelle. Vous ne pouvez pas les activer et les désactiver rapidement, et vous ne voulez certainement pas les commiter accidentellement et les exécuter en production.
Pour cette raison, si vous avez besoin de journaliser quelque chose à des fins de débogage, je recommande d’utiliser des points d’arrêt de journalisation, car ils sont beaucoup plus faciles à gérer.
Pour définir un point d’arrêt de journalisation, maintenez Shift enfoncé, puis cliquez dans la marge. Contrairement à un point d’arrêt régulier, il ne suspend pas l’exécution du programme, mais affiche dans la console à la place.
Par défaut, c’est un message indiquant que le programme a atteint cette ligne. Vous pouvez également utiliser les options près de la case à cocher Evaluate and log dans les paramètres du point d’arrêt si vous préférez journaliser la trace de pile actuelle ou le résultat d’une expression personnalisée.
Soyez prudent avec les expressions de journalisation. Évaluer celles qui causent des effets secondaires peut être une source de nouveaux bugs ou de comportements inattendus. De plus, lorsqu’elles sont utilisées dans du code chaud, elles peuvent ralentir considérablement votre programme.
Lorsque les points d’arrêt de journalisation deviennent nombreux, vous pouvez les suivre et les gérer dans la boîte de dialogue Breakpoints (Run | View Breakpoints) :
Vous pouvez même créer des groupes personnalisés pour eux :
Cela vous aidera à gérer vos points d’arrêt de manière centralisée. Par exemple, vous pouvez créer un groupe lié à un bug particulier et le sauvegarder pour plus tard. Lorsque le problème disparaît, il suffit de le désactiver. De cette façon, si le problème réapparaît, vous n’avez pas à tout recréer depuis le début. Il suffit de réactiver le groupe.
Journalisation des événements fréquents
Pour les événements qui se produisent souvent pendant l’exécution du programme, journaliser chaque événement individuel peut être superflu. Non seulement cela inonde la console de messages, mais une grande quantité d’interactions avec les I/O peut ralentir considérablement la session de débogage.
Pour de tels événements, il peut être utile d’utiliser la fonctionnalité Pass count. Vous pouvez y accéder dans la boîte de dialogue Breakpoints.
Après avoir défini Pass count sur une valeur spécifique, le point d’arrêt correspondant ne se déclenchera qu’à chaque n-ième passage, garantissant que la journalisation ne devienne pas une nuisance.
Résumé
Que vous insériez des instructions d’impression ou que vous définissiez des points d’arrêt de journalisation pour le débogage, les outils modernes ont des fonctionnalités pour améliorer votre expérience de débogage. Avec cet article, je voulais m’assurer que vous connaissiez ces petites astuces qui rendent l’ensemble du processus plus agréable.
Bon débogage !