paint-brush
Déboguer comme un développeur expérimenté : flux de contrôle du programme de débogagepar@shai.almog
915 lectures
915 lectures

Déboguer comme un développeur expérimenté : flux de contrôle du programme de débogage

par Shai Almog7m2022/12/14
Read on Terminal Reader
Read this story w/o Javascript

Trop long; Pour lire

Le flux de contrôle est bien plus qu'un pas en avant. Vous pouvez "sauter" vers des décalages de code arbitraires lors du débogage pour reproduire des états et des comportements élaborés !
featured image - Déboguer comme un développeur expérimenté : flux de contrôle du programme de débogage
Shai Almog HackerNoon profile picture

A partir de maintenant, j'ai publié les 3 premières vidéos du cours et publierai la quatrième demain. Je prévois de publier deux vidéos par semaine sur YouTube pour maximiser l'impact, mais ici, je ne bloguerai qu'une leçon par semaine pour éviter la sursaturation.


J'ai tourné environ 4 heures de contenu vidéo et je n'ai toujours pas terminé le 2e module sur huit. Ce cours sera très détaillé et intensif.


Je travaille actuellement sur la plate-forme de cours, je progresse bien et j'espère la publier assez tôt ici . Il est peut-être déjà en ligne au moment où vous lisez ceci !


Il est important pour moi que l'expérience utilisateur de la plateforme de cours soit satisfaisante. J'ai donc évité les DRM autant que possible. J'espère que les gens respecteront cela et l'effort que je mets là-dedans.


Je construis la plate-forme de cours sur Spring Boot 3 avec GraalVM afin qu'elle soit idéalement légère, rapide et assez simple. Je prévois d'héberger les vidéos sur YouTube en tant que vidéos non répertoriées pour offrir une expérience de visionnage décente.


Cela signifie que les développeurs pourraient trahir ma confiance et partager des vidéos non répertoriées. J'espère que non.


Mon raisonnement ici est une faible surcharge et d'excellentes performances. J'aimerais aussi rendre le cours gratuit dans quelques années. En utilisant YouTube, je peux rendre le cours gratuit en rendant les vidéos publiques.


La vidéo suivante traite du flux de contrôle dans le débogage. Cela commence par les bases mais peut devenir assez profond pour le saut à la ligne, le retour forcé, etc. Ce sont des outils qui peuvent changer considérablement la façon dont nous déboguons le code.


N'oubliez pas de consulter mon livre et de vous abonner à la chaîne YouTube pour les prochaines vidéos !

Transcription

Bienvenue dans la deuxième partie du débogage à Scale où vous pouvez apprendre les astuces secrètes du débogage.


Dans cette section, nous aborderons l'aspect le plus basique du débogage. Nous avons atteint un point d'arrêt. Maintenant quoi?

Eh bien, c'est là que les débogueurs nous permettent de contrôler le flux pour étudier comment tout fonctionne dans un environnement contrôlé.


Alors, qu'y a-t-il au programme aujourd'hui ?


Nous discuterons de la progression et de l'entrée dans le code, j'espère que la majeure partie de cette liste vous est familière. Les deux derniers éléments où nous perturbons le flux de contrôle ne vous sont peut-être pas familiers. Je suis sûr que la plupart d'entre vous ne connaissent pas le dernier point à l'ordre du jour. Comment puis-je savoir? Restez à l'écoute et découvrez!

Enjamber, entrer, sortir et forcer

Step over est la forme la plus élémentaire de flux de contrôle. Nous laissons le code de la ligne s'exécuter, puis nous pouvons inspecter les résultats dans le volet variable. C'est simple et facile.


Dans ce cas, j'ai juste appuyé sur le bouton ici quelques fois, mais je pourrais aussi appuyer simplement sur F8 pour obtenir le même effet…


Ensuite, nous aborderons deux opérations distinctes, l'entrée et la sortie associée. Step into va dans la méthode que nous invoquons. Notez que s'il n'y a pas de méthode pour entrer dans l'étape, into agira comme une étape.


Nous avons deux opérations d'intégration. Le régulier et le pas de force dans lequel agit normalement de la même manière. Nous avons besoin de la version force lorsque nous voulons entrer dans une API qu'IntelliJ ignorera normalement. Nous pouvons appuyer sur F7 pour entrer dans une méthode. Nous pouvons appuyer sur Maj F7 pour forcer l'entrée.


Lorsque nous avons fini de regarder une méthode et que nous ne nous soucions pas du reste, nous pouvons sortir. Ceci exécute le reste de la méthode et retourne.


Notez que si nous avons un point d'arrêt avant le retour, il s'arrêterait toujours au point d'arrêt comme nous le voyons dans ce cas. Nous pouvons appuyer sur ce bouton ici pour sortir ou, nous pouvons appuyer sur Maj-F8 pour faire la même chose.

Continuer et exécuter jusqu'au curseur

Continue poursuit l'exécution du projet jusqu'à ce que le point d'arrêt soit à nouveau atteint. Ceci est également appelé CV. C'est une fonctionnalité simple que nous utilisons beaucoup. Vous pouvez continuer en appuyant sur la version spéciale du bouton de lecture ici. Le raccourci est également utile car nous l'utilisons beaucoup, c'est F9.


Exécuter jusqu'au curseur nous permet de sauter les lignes qui ne sont pas intéressantes et d'atteindre le code qui compte. Nous pouvons définir un point d'arrêt sur cette ligne pour obtenir le même effet, mais c'est parfois plus pratique car cela supprime le besoin de définir et de désactiver un point d'arrêt.


Nous pouvons appuyer sur ce bouton pour courir vers le curseur, ou nous pouvons utiliser ALT-F9 comme raccourci pour cette fonctionnalité.

Forcer le retour et lancer une exception

Cette fonctionnalité est connue sous le nom de retour forcé dans IntelliJ/IDEA.


Pour voir l'option de retour forcé, nous faisons un clic droit sur la trace de la pile et pouvons voir un ensemble d'options. Une option encore plus intéressante est le drop frame que je montrerai bientôt.


Remarquez l'option throw exception qui est identique à force return, mais elle lève une exception à partir de la méthode.


Une fois que j'ai cliqué sur cette option, une boîte de dialogue s'affiche pour entrer la valeur de retour de la méthode. Cela me permet de modifier la valeur renvoyée par la méthode, ce qui est très utile lorsque je souhaite déboguer un bogue difficile à reproduire.


Imaginez un cas où une panne arrive à un client, mais vous ne pouvez pas la reproduire. Dans ce cas, je peux simuler ce que le client pourrait ressentir en renvoyant une valeur différente de la méthode.


Ici, la valeur est une variable booléenne, donc c'est simple. Mais votre code peut retourner un objet ; en utilisant cette technique, vous pouvez remplacer cet objet par une valeur arbitraire. Un bon exemple serait null, et si cette méthode renvoyait null, reproduirait-elle le problème rencontré par mon utilisateur ?


De même, throw exception nous permet de reproduire des cas extrêmes tels que lever une exception en raison d'un échec arbitraire.


Une fois que nous appuyons sur OK, nous revenons avec une valeur différente. Dans ce cas, j'étais au bord de la méthode mais j'aurais pu le faire au début de la méthode et ignorer complètement l'exécution de la méthode.


Cela nous permet de simuler des cas où une méthode pourrait échouer, mais nous voulons nous moquer de son comportement. Cela peut avoir du sens si nous ne pouvons pas reproduire le comportement vu par le client. Nous pouvons simuler en utilisant des outils comme celui-ci.

Cadre de chute

Le drop frame est presque aussi révolutionnaire, mais c'est aussi plus une "astuce soignée". Ici, je suis entré dans une méthode par erreur. Oups, je ne voulais pas faire ça. Je voulais changer quelque chose avant d'intervenir… Heureusement, il y a le drop frame.


Nous avons vu que je peux y accéder dans le menu contextuel ; vous pouvez également cliquer ici pour le déclencher.


Drop frame supprime efficacement le cadre de la pile. C'est une opération d'annulation. Mais ce n'est pas exactement ça. Il ne peut pas annuler les changements d'état qui se sont produits dans la méthode dans laquelle nous sommes entrés.


Ainsi, si vous entrez dans la méthode et que des variables qui ne sont pas sur la pile sont modifiées, elles resteront modifiées.


Les variables sur la pile sont les variables que la méthode déclare ou accepte comme arguments, celles-ci seront réinitialisées. Cependant, si l'une de ces variables pointe vers un objet, alors cet objet réside dans le tas et les modifications ne peuvent pas être réinitialisées en déroulant la pile.


C'est toujours une fonctionnalité très utile similaire au retour forcé à l'exception qu'elle reviendra à la ligne actuelle, pas à la ligne suivante. Donc, il ne renverra pas de valeur.


C'est encore mieux que ça !

Aller à la ligne

Aller à la ligne est une fonctionnalité secrète d'IntelliJ. Cela fonctionne, mais les développeurs ne le savent pas. Vous devez installer le plugin Jump to Line pour l'utiliser. Comme il a un nombre d'installations relativement faible, je suppose que les gens ne savent tout simplement pas qu'il existe. Parce que c'est un plugin indispensable. Cela changera votre façon de déboguer !


Avec le saut à la ligne, nous pouvons déplacer le pointeur d'instruction actuel vers une position différente dans la méthode. Nous pouvons faire glisser la flèche sur la gauche pour amener l'exécution à un nouvel emplacement. Notez que cela fonctionne dans les deux sens, je peux déplacer l'exécution en cours d'avant en arrière.


Cela n'exécute pas le code entre les deux, cela déplace littéralement l'instruction actuelle vers une nouvelle position. C'est tellement cool, je dois le montrer à nouveau…


Si vous voyez un bogue, faites simplement glisser l'exécution en arrière et reproduisez-la. Vous pouvez modifier les valeurs des variables et reproduire le problème encore et encore jusqu'à ce que vous le compreniez parfaitement.


Nous pouvons ignorer le code qui échoue, etc. C'est spectaculaire. Je n'ai pas besoin de recompiler le code. Si vous avez déjà eu un cas où vous avez accidentellement franchi une ligne et, "Oups. Ce n'est pas ce que je voulais.

Ensuite, arrêtez le débogueur et recommencez à zéro. C'est le plugin pour vous. C'est arrivé à tout le monde !


Nous pouvons simplement faire reculer l'exécution et recommencer. C'est absolument fantastique !

Pour terminer

Dans la prochaine vidéo, nous parlerons brièvement de la montre. Nous allons creuser beaucoup plus profondément dans la sixième vidéo de la série. Alors restez à l'écoute!


Si vous avez des questions, veuillez utiliser la section des commentaires. Merci!