Bonjour à tous dans la communauté CodeGym ! Aujourd'hui, parlons du débogage - qu'est-ce que c'est et comment déboguer dans IntelliJ IDEA. Cet article est destiné aux personnes ayant déjà un minimum de connaissances sur Java Core. Il n'y aura pas de frameworks ou de procédures compliquées pour publier des bibliothèques. Une balade tranquille. Alors installez-vous confortablement et commençons !
de documentation README, qui se trouve dans le répertoire racine du projet, le comportement attendu de toutes les fleurs dont le nectar est collecté est que la quantité de miel collecté (qui prend la forme d'un double ) soit égale à la moitié de le nectar récolté. Le projet a les classes suivantes :
de documentation README, le nectar est converti en miel dans un rapport de 2 à 1 :
de la documentation contient une erreur et doit être mis à jour. Mettons à jour le fichier README :
Stack Overflow CodeGym :)
Pourquoi avez-vous besoin du mode débogage
Clarifions tout de suite quelque chose pour nous : il n'y a pas de code sans bugs... C'est ainsi que fonctionne la vie. Donc, nous ne devrions pas tomber en morceaux et abandonner si notre code ne fonctionne pas comme prévu. Mais que devons-nous faire ? Eh bien, nous pourrions mettreSystem.out.println
des instructions partout, puis passer au peigne fin la sortie de la console dans l'espoir de trouver une erreur. Cela dit, vous pouvez (et les gens le font) déboguer en utilisant une journalisation minutieuse. Mais si vous pouvez exécuter votre code sur une machine locale, il est préférable d'utiliser le mode Debug . Je tiens à noter tout de suite que dans cet article, nous envisagerons de déboguer un projet à l'aide d'IntelliJ IDEA.
Qu'est-ce que le mode débogage ?
Le mode débogage sert à déboguer (vérifier) le code en cours d'exécution. Cela vous permet d'arrêter l'exécution à des endroits désignés et de voir comment les choses progressent. Il vous permet de comprendre l'état du programme à un endroit particulier du code. C'est comme être capable d'arrêter l'horloge et de tout regarder de côté. Cool, non ? Notre objectif est d'apprendre rapidement et facilement à déboguer des applications à l'aide de notre environnement de développement bien-aimé IntelliJ IDEA.Ce dont vous avez besoin pour commencer le débogage
Voici quelques conseils gratuits : lors de la lecture de cet article, faites tout ce qui sera décrit ici - vous avez tout ce que vous devez faire pour suivre. De quoi as-tu besoin:- IntelliJ IDEA version 2019.3.1 ou supérieure. Au cas où quelqu'un ne l'aurait pas, voici un lien où vous pouvez le télécharger . Téléchargez l'édition communautaire — c'est la version que j'utiliserai.
- Clonez ce projet GitHub et importez-le via IDEA.
Juste un peu de théorie... promis :D
Pour commencer à déboguer ne serait-ce qu'un peu, vous devez comprendre ce qu'est un point d'arrêt et vous familiariser avec quelques raccourcis clavier. Un point d'arrêt est un marqueur spécial qui indique où vous souhaitez arrêter l'exécution de l'application, éventuellement en fonction de l'état de l'application. Vous pouvez définir un point d'arrêt soit en cliquant avec le bouton gauche sur le panneau latéral gauche, soit en cliquant sur l'emplacement du code et en appuyant sur Ctrl+F8 . Examinons trois types de points d'arrêt : les points d'arrêt de ligne, les points d'observation de champ et les points d'arrêt de méthode. Voici à quoi ça ressemble:-
Sur une ligne :
Si une instruction a une expression lambda, alors IDEA vous invite à choisir de placer le point d'arrêt sur l'intégralité de l'instruction ou spécifiquement sur l'expression lambda :
-
Sur une méthode :
-
Sur une classe :
- Bee.java:24 — dans la classe Bee à la ligne 24
- Main.java:14 — dans la classe Main à la ligne 14
Allons faire cette chose appelée débogage !
Je viens d'une longue lignée d'apiculteurs familiaux, donc le projet que j'ai créé pour illustrer le débogage décrit des modèles du processus par lequel les abeilles collectent le nectar, transforment le nectar en miel, puis obtiennent le miel de la ruche. Selon le fichier- Abeille - une abeille ouvrière ordinaire
- BeeQueen - la reine des abeilles
- BeeHive — la ruche
- HoneyPlant - une plante à miel (source de nectar) à partir de laquelle le nectar est collecté
- Main - c'est là que nous trouvons
public static void main()
, la méthode où l'exécution commence.
main()
méthode, nous constatons que non seulement notre programme ne calcule pas la quantité de miel, mais qu'il génère également une exception... Nous devons enquêter et déterminer quel est le problème. À partir de la pile de traces dans le coin inférieur droit, nous pouvons voir qu'une exception RuntimeException a été lancée HoneyPlant.java:20
: c'est exactement ce dont nous parlions ci-dessus. Surveillons cette RuntimeException en exécutant la main()
méthode en mode débogage. Pour ce faire, cliquez sur la flèche verte en forme de triangle dans IntelliJ IDEA à côté de la main()
méthode. En conséquence, nous arrêterons le programme juste avant que l'exception ne soit levée et nous verrons cette icône : Pour obtenir toutes les informations disponibles, nous devons regarder dans la section Debug. Il a une variablevolet qui affiche toutes les variables disponibles dans cette partie de l'application :
- nectar = 1,0 ;
- nectarCapacity = -1.0.
if (nectar == 0) {
return 0;
}
Mais le problème est que nous vérifions la mauvaise variable. Il s'agit d'une erreur dans le code. Au lieu de vérifier la quantité de nectar disponible dans la fleur (qui est stockée dans la variable nectarCapacity ), le programme vérifie la valeur du paramètre nectar de la méthode , qui est la quantité de nectar que nous voulons prélever de la fleur. C'est ici! Notre premier bogue ! Après avoir corrigé cela, nous obtenons le code suivant :
if (nectarCapacity == 0) {
return 0;
}
Exécutez maintenant la main()
méthode normalement (Run 'Main.main()')
. Aucune exception n'est levée et le programme fonctionne : l'application s'exécute jusqu'à la fin et donne la réponse suivante :
"33.0 honey was produced by 7 bees from 2 honey plants"
Tout irait bien maintenant, mais cette réponse est incorrecte... Selon le fichier ## Documentation
Presentation based on honey production.
**Note**: 2 units of nectar = 1 unit of honey
La méthode principale a clairement deux plants de miel avec 30 et 40 unités de nectar, respectivement. Nous devrions donc finalement nous retrouver avec 35 unités de miel. Mais le programme nous dit que nous en avons 33. Où sont passées les deux autres unités ? Découvrons-le! Pour ce faire, définissez un point d'arrêt dans la Main.main()
méthode à la ligne 28, où beeHive.populateHoney()
est appelée et exécutez la main()
méthode en mode Debug : Nous allons examiner ce point plus en détail. Le programme a cessé de s'exécuter avant d'exécuter la ligne 28. Dans la partie inférieure, nous voyons la section Debug, qui affiche toutes les informations disponibles sur l'application en cours d'exécution. Comme déjà mentionné, le volet Variables contient toutes les variables et tous les objets disponibles dans cette partie de l'application. Le volet Frames affiche les étapes par lesquelles passe l'application — vous pouvez regarder les étapes précédentes (frames) et voir toutes les données locales. Pour continuer à exécuter le programme, vous pouvez appuyer sur F9 ou sur l'icône verte, comme indiqué ci-dessous : Pour arrêter le programme, cliquez sur le carré rouge : Pour redémarrer l'application en mode débogage, cliquez sur la flèche : application pas à pas à l'aide de deux touches :
- F8 — Parcourez le code sans entrer dans les méthodes ;
- F7 - Parcourez le code et entrez dans les méthodes.
beeHive.populateHoney()
méthode. En y entrant, nous obtenons : Nous allons maintenant utiliser F8 pour parcourir cette méthode et décrire ce qui s'y passe :
- Ligne 25 — L'API Stream est utilisée pour collecter le nectar de toutes les abeilles
- Ligne 26 — Le miel nouvellement créé est ajouté au miel existant ;
- Ligne 27 — 2 unités de miel sont allouées à la reine
- Ligne 28 — Ces deux unités sont soustraites de la quantité totale de miel
- Ligne 29 — La reine mange ce miel.
## Documentation
Presentation based on honey production.
**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
Avaient fini. Nous avons corrigé tous les bugs que nous avons trouvés. On peut tranquillement continuer avec un air suffisant, siroter un café et lire des articles sur Résumons
Dans cet article, nous avons appris :- le travail de tout le monde comporte des erreurs et le débogage est un excellent moyen de les corriger
- qu'est-ce qu'un point d'arrêt et quels types de points d'arrêt existe-t-il ?
- comment définir un point d'arrêt d'exception
- comment parcourir le code en mode débogage