Devoxx FR 2023 – Improving your skills with the Debugger par Bouke Nijuis
Deuxième conférence à laquelle j’assiste (et dernière pour laquelle j’ai pris des notes), ça parle de l’utilisation du debugger.
On va utiliser un programme simple de type Hello World.
Après un rapide rappel sur les bases de l’utilisation d’un debugger avec IntelliJ on entre dans le vif du sujet, les fonctionnalités avancées et parfois cachées ! Certaines de ces fonctionnalités nécessitent de lancer des commandes dans IntelliJ car il n’y a pas de bouton ni d’entrée dans le menu pour elles, le raccourcit SHIFT-SHIFT permet entre autre de chercher des commandes.
Commençont par le breakpoint :
- Au clic droit: enable/disable, suspend all ou seulement le thread en cours, ajout de condition
- Conditional breakpoint: une condition en Java qui doit être vrai pour que le breakpoint soit actif. Utile quand un breakpoint sera évalué souvent mais qu’on n’est intéressé que par certaines exécutions
- More => beaucoup plus de capacité. Evaluate and log : permet de loguer automatiquement au breakpoint et évite le sysout debugging avec le risque d’oublier de les retirer ensuite. Utile avec un breakpoint de type non-suspending. Il est possible de le faire automatiquement en sélectionnant une variable et SHIFT-CLICK
- Le Drag and Dropd’un breakpoint est possible !
- Il eexiste une commande Restore Breakpoint au cas où il aurait été supprimé par erreur
Stepping :
- Force step over : ignore les breakpoints entre la ligne en cours et la suivante (CTRL-F8)
- Force step into : par défaut step into ne va que dans nos méthodes et pas dans les méthodes du code third party, force step into va y aller
- Smart step into : s’active quand il y a plusieurs méthodes à une même ligne et permet de selectionner la méthode dans laquelle aller
- Dropping Frames (icône sur la frame): permet de supprimer une frame et de « retourner » à la précédente => retour dans le temps ! Attention, uniquement dans le contexte de la JVM
Evaluating expression :
- Quick expression : l’expression est surlignée et on peut la cliquer, pas de modification possible
- Evaluation expression : on sélectionne l’expression, on peut ensuite la modifier => attention la modification de variable est possible !
Stream debugger : quand intelliJ détecte un breakpoint sur une Stream, un bouton apparait (à droite) qui permet de debugger chaque étape de la stream !
A un breakpoint, il est possible de changer le code puis d’exécuter la commande « Reload changed class » : ne marche que pour changer le code dans une méthode / une frame différente. Dropping frames permet de supprimer la frame dans laquelle on a changé le code et ça va marcher !
Remote debugging :
- Edit configuration -> Remote JVM Debug -> contient des options lignes de commandes à ajouter à la commande Java pour que le programme écoute la connexion d’une JVM. Ajouter suspend=y pour que le programme attende une connexion au démarrage.
- Lancer la run config va lancer un debugger qui va s’attacher au programme qui attend et voila !
- Drop frames et reload current class marchent !
En allant à cette session j’avais peur de ne rien apprendre, mais en fait j’ai appris plein de choses que je ne connaissais pas et me suit aperçu que je sous-utilisais les capacités du debugger. Et maintenant je sais à quoi servent tous les boutons et les icônes du debugger d’IntelliJ !