Maison Java javaDidacticiel Débogage &#printf&# amélioré

Débogage &#printf&# amélioré

Aug 21, 2024 am 06:01 AM

Lire dans d'autres langues : Anglais Español 中文

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 pour cela. Lorsque vous traitez vos premiers bugs, avant même de savoir ce qu'est un débogueur, il vous vient naturellement à l'esprit de faire imprimer à votre programme les variables étape par étape, afin de pouvoir suivre l'exécution dans la console.

Bien qu'il s'agisse de l'une des techniques de débogage les plus élémentaires, les développeurs expérimentés l'utilisent également beaucoup. Il peut vous aider à enquêter sur tout type de problème, tel que des routines sous-optimales, un état incohérent, des problèmes de multithreading, etc.

Comme je l'ai déjà mentionné, cette technique ne nécessite pas l'utilisation d'outils spéciaux, comme un IDE. Cependant, si vous en utilisez un, cela peut vous rendre encore plus efficace dans le suivi de l'état du programme.

Remarque : Cet article présente les fonctionnalités d'IntelliJ IDEA. Des fonctionnalités similaires peuvent ou non être disponibles dans d’autres IDE. Si vous utilisez un autre outil, pensez à consulter sa documentation pour voir si ces fonctionnalités y sont également présentes.

Modèles en direct

IntelliJ IDEA fournit des modèles en direct pour les modèles de journalisation de débogage les plus courants. Pour utiliser un modèle en direct pour la journalisation du débogage, tapez la commande correspondante et appuyez sur Tab. IntelliJ IDEA générera l'instruction d'impression et l'insérera au niveau du curseur.

Regardons quelques exemples.

Enregistrer les paramètres de la méthode

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // digite 'soutp' aqui, depois pressione Tab

    return null;
}
Copier après la connexion

Code généré :

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("in = " + in + ", mask = " + mask + ", newColor = " + newColor);

    return null;
}
Copier après la connexion

Enregistrer les valeurs

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    // digite 'soutv' aqui, pressione Tab e então selecione o valor

    return a * b * parameter;
}
Copier après la connexion

Code généré :

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    System.out.println("b = " + b);

    return a * b * parameter;
}
Copier après la connexion

Enregistrer les entrées de méthode

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // digite 'soutm' aqui

    return null;
}
Copier après la connexion

Code généré :

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("ImageUtils.recolor");

    return null;
}
Copier après la connexion

Points d'arrêt d'enregistrement

L'un des inconvénients du débogage avec les instructions print est qu'elles introduisent la surcharge de gestion manuelle. Vous ne pouvez pas les activer et les désactiver rapidement, et vous ne voulez certainement pas les compromettre accidentellement et les exécuter en production.

Pour cette raison, si vous devez enregistrer quelque chose à des fins de débogage, je vous recommande d'utiliser des points d'arrêt de journalisation car ils sont beaucoup plus faciles à gérer.

Depuração

Pour définir un point d'arrêt de journalisation, maintenez la touche Maj enfoncée, puis cliquez sur l'onglet. Contrairement à un point d'arrêt classique, il ne suspend pas l'exécution du programme, mais l'imprime sur la console.

Par défaut, c'est un message indiquant que le programme a atteint cette ligne. Vous pouvez également utiliser les options à côté de la case à cocher Évaluer et enregistrer dans les paramètres du point d'arrêt si vous préférez enregistrer la trace actuelle de la pile ou le résultat d'une expression personnalisée.

Depuração

Remarque : Soyez prudent avec les expressions d'enregistrement. L’évaluation de ceux qui provoquent des effets secondaires peut être source de nouveaux bugs ou de comportements inattendus. De plus, lorsqu'ils sont utilisés dans du code chaud, ils 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 Points d'arrêt (Exécuter | Afficher les points d'arrêt) :

Depuração

Vous pouvez même créer des groupes personnalisés pour eux :

Depuração

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 spécifique et l'enregistrer pour plus tard. Une fois le problème résolu, désactivez le groupe. De cette façon, si le problème réapparaît, vous n’aurez pas à tout recréer à partir de zéro. Vous réactivez simplement le groupe.

Journal des événements fréquents

Pour les événements qui se produisent fréquemment pendant l'exécution du programme, l'enregistrement de chaque événement individuel peut être trop cher. Non seulement cela inonde la console de messages, mais trop d'interactions d'E/S peuvent ralentir considérablement la session de débogage.

Depuração

Pour de tels événements, il peut être utile d'utiliser la fonctionnalité Compte de passes. Vous pouvez y accéder dans la boîte de dialogue Points d'arrêt.

.

Depuração

Une fois que vous avez défini le Nombre de passes sur une valeur spécifique, le point d'arrêt correspondant ne déclenchera qu'un coup sur nième, garantissant que l'enregistrement ne devienne pas une nuisance.

Résumé

Que vous insériez des instructions d'impression ou définissiez des points d'arrêt de journalisation pour le débogage, les outils modernes disposent de fonctionnalités pour améliorer votre expérience de débogage. Avec cet article, je voulais m'assurer que vous êtes au courant de ces petites astuces qui rendent l'ensemble du processus plus agréable.

Si vous êtes intéressé par d'autres articles liés au débogage et au profilage, consultez certains de mes autres articles :

  • Debugger.godMode() – Piratez une application JVM avec le débogueur
  • Dépannage de la lenteur du débogueur
  • Débogage des applications inactives
  • Quel est le problème avec createDirectories() ? - Guide du profil CPU

Bon débogage !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Mar 17, 2025 pm 05:44 PM

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Mar 17, 2025 pm 05:35 PM

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Mar 07, 2025 pm 06:12 PM

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités

Iceberg: L'avenir des tables de Data Lake Iceberg: L'avenir des tables de Data Lake Mar 07, 2025 pm 06:31 PM

Iceberg: L'avenir des tables de Data Lake

Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe Mar 07, 2025 pm 05:52 PM

Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Mar 17, 2025 pm 05:43 PM

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Mar 17, 2025 pm 05:46 PM

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?

See all articles