Dans le premier chapitre de mon livre de débogage, j’aborde le débogage IDE. Dans ce chapitre, je parle principalement d’IntelliJ/IDEA. Les gens me demandent souvent pourquoi je n’écris pas autant sur VS Code… La raison est qu’il n’y a pas grand chose à écrire. Son débogueur est plus simple pour le meilleur et pour le pire. Il n’est pas aussi puissant que les autres IDE. J’ai créé la vidéo suivante qui couvre le contenu de cet article :
Ce n’est pas un claquement contre VS Code ou contre Microsoft. Visual Studio possède l’un des débogueurs les plus puissants du marché. Mais, Visual Studio Code n’a pas beaucoup de fonctionnalités de Visual Studio ou d’autres IDE. Je pense que c’est intentionnel. Je pense que c’est une décision basée sur l’expérience utilisateur dans laquelle ils ont supprimé des fonctionnalités pour simplifier la convivialité. Une chose que VS Code a bien fait a été d’exposer la fonctionnalité de point de journalisation (point de trace), afin qu’elle soit plus détectable pour le développeur occasionnel. C’est plutôt génial et cela n’aurait pas été pratique si l’IDE avait toutes les fonctionnalités principales.
Mais il y a un prix qui vient avec la simplicité. Comme vous pouvez le voir dans le tableau suivant, de nombreuses fonctionnalités manquantes sont disponibles dans IntelliJ. Ce sont toutes des fonctionnalités que j’ai couvertes dans des articles de blog ou des vidéos. Notez que les liens vidéo dans le tableau suivant sont des liens directs vers l’heure spécifique de la vidéo.
Fonctionnalité |
Code VS |
commentaires |
Liens |
Point d’arrêt |
✅ |
Vidéo, publication |
|
Point d’arrêt conditionnel |
✅ |
Vidéo, publication |
|
Point de journalisation/point de trace |
✅ |
Vidéo, publication |
|
Enjamber |
✅ |
Vidéo, publication |
|
Entrer dans |
✅ |
Vidéo, publication |
|
Sors |
✅ |
Vidéo, publication |
|
Continuer |
✅ |
Vidéo, publication |
|
Exécuter jusqu’au curseur |
✅ |
Vidéo, publication |
|
Retour immédiat |
❌ |
Le cadre de redémarrage est disponible |
Vidéo, publication |
Aller à la ligne |
❌ |
Vidéo, publication |
|
Affichage de la valeur de retour |
✅ |
(activé par défaut) |
Vidéo, publication |
Évaluer |
✅ |
Vidéo, publication |
|
Montre |
✅ |
Vidéo, publication |
|
Montre en ligne |
❌ |
Vidéo, publication |
|
Définir la valeur |
✅ |
Vidéo, publication |
|
Marquage d’objet |
❌ |
Vidéo, publication |
|
Points d’arrêt de la méthode |
❌ |
Vidéo, publication |
|
Points de surveillance sur le terrain |
❌ |
Vidéo, publication |
|
Points d’arrêt d’exception |
✅ |
Ils sucent sans filtres |
Vidéo, publication |
Regrouper/nommer les points d’arrêt |
❌ |
Vidéo, publication |
|
Désactiver les points d’arrêt |
✅ |
Vidéo, publication |
|
Filtres d’instances |
❌ |
Vidéo, publication |
|
Filtres de classe |
❌ |
Vidéo, publication |
|
Filtres d’appelants |
❌ |
Vidéo, publication |
|
Filtration |
❌ |
Filtrage des tableaux et des collections |
Vidéo, publication |
Débogueur de flux |
❌ |
Vidéo, publication |
|
Rendu de base |
✅ |
Très simpliste |
Vidéo, publication |
Rendu d’entrée |
❌ |
Vidéo, publication |
|
Rendu des annotations |
❌ |
Vidéo, publication |
|
Affichage du fil |
❌ |
Vidéo, publication |
|
Traces de pile asynchrones |
❌ |
Pas de support personnalisé |
Vidéo, publication |
Mémoire consultable |
❌ |
Vidéo, publication |
|
Suivre les nouvelles instances |
❌ |
Vidéo, publication |
Les fonctionnalités manquantes
Voici un aperçu de haut niveau des fonctionnalités manquantes.
Contrôle de flux
Return immediatement nous permet de revenir immédiatement d’une méthode et potentiellement de retourner une valeur arbitraire. C’est fantastique lorsque vous voulez tester des cas extrêmes.
Il existe également des fonctionnalités de suppression d’image et d’exception de lancement.
Pour être juste, VS Code a un « restart frame », qui est similaire au « drop frame » et aussi agréable.
Aller à la ligne nécessite un plugin pour IntelliJ. Il nous permet de faire glisser le pointeur d’exécution vers un emplacement arbitraire. Si vous avez un bogue, faites simplement glisser l’exécution en arrière et réessayez.
Vous avez besoin de sauter une ligne de code car votre application est dans un état problématique, mais vous souhaitez toujours déboguer ?
Faites glisser vers l’avant. C’est une fonctionnalité fantastique lorsque vous en avez besoin.
Zone de surveillance
Les deux IDE contiennent une montre, mais seul IntelliJ peut afficher les valeurs des variables de la montre directement dans l’éditeur lui-même. Ceci est très pratique lorsque vous regardez plusieurs valeurs. Cela nous permet de voir la pile en un coup d’œil lorsque nous parcourons le code.
Le marquage d’objet est l’une de mes fonctionnalités obscures préférées. Il nous permet de déclarer dynamiquement une variable globale qui nous aide à suivre une valeur. Nous pouvons utiliser cette variable globale dans un point d’arrêt conditionnel pour vérifier les choses. Un tel exemple consiste à enregistrer le thread actuel en tant qu’objet marqué et à ne s’arrêter que si nous frappons la méthode avec un thread différent.
Points d’arrêt
Les points d’arrêt de méthode sont assez problématiques, mais ils ont des utilisations avancées. L’une des grandes valeurs est la possibilité de casser au retour d’une longue méthode. Ceci est utile pour tracer les problèmes de threading.
Les points de surveillance de champ sont très utiles lors du suivi des mutations de champ et des nouvelles valeurs.
Nous pouvons gérer les points d’arrêt, les nommer, les regrouper et les désactiver en tant que groupe hiérarchique. Lorsque vous traitez plusieurs tâches et que vous changez de branche au milieu d’une session de débogage, nous pouvons maintenir cette session en attente en regroupant tous les points d’arrêt.
Lorsque nous revenons à la tâche, nous pouvons instantanément revenir en arrière !
VS Code a des points d’arrêt d’exception, mais sans filtres, ils sont absolument nuls.
Nous pouvons filtrer les accès aux points d’arrêt en fonction de plusieurs critères tels que l’instance, la classe ou une méthode spécifique dans la pile. J’ai passé tellement de temps à appuyer sur continuer encore et encore. Nous pouvons réduire cette douleur en utilisant ces outils.
Tableaux, collections et flux
Il existe un autre type de filtrage spectaculaire. Nous pouvons filtrer le contenu d’un tableau ou d’une collection directement dans la zone de surveillance ou d’évaluation. J’ai passé beaucoup de temps à fouiller dans des tableaux de données d’images avec des milliers d’éléments. C’était un cauchemar. Avec cela, nous pouvons trouver instantanément les entrées dont nous avons besoin dans une collection ou un tableau.
Il s’agit de l’API de flux Java 8 et plus récente, qui est une construction de programmation fonctionnelle. C’est un outil fantastique, mais il rend le débogage difficile. Le débogueur de flux emprunte des concepts aux débogueurs de voyage dans le temps pour rendre le débogage de flux plus facile que le débogage normal dans certains cas.
Rendu d’entrée
C’est l’une des fonctionnalités les plus fantastiques auxquelles vous pouvez penser. Nous pouvons entièrement personnaliser l’apparence des entrées dans la montre. Dans la démo ici, je montre comment je peux exposer le contenu d’un objet « mappage relationnel d’objet » lorsque j’entre dans le débogueur.
Mais c’est difficile à configurer à chaque fois pour chaque cas. Les annotations nous permettent de configurer cela globalement afin que nous puissions le voir à chaque fois pour des objets de bibliothèque spécifiques lors de l’exécution dans le débogueur.
Thread et débogage asynchrone
VS Code affiche les threads, mais il a une fonctionnalité d’affichage et une configurabilité très limitées. IntelliJ peut ouvrir une vue de thread dédiée, des hiérarchies et bien plus encore.
Il prend également en charge le collage de traces de pile asynchrones pour faciliter le débogage du code asynchrone. Cela fonctionne de manière transparente avec des API bien connues, et ce qui est vraiment cool, c’est que nous pouvons utiliser des annotations pour ajouter cela à nos API personnalisées.
Mémoire
Nous pouvons rechercher dans la mémoire pour trouver n’importe quelle instance d’objet. Nous pouvons trouver des instances internes de VM et enquêter sur les problèmes en examinant les objets du système.
Mieux encore, nous pouvons suivre chaque nouvelle instance d’une classe particulière. Obtenez des traces complètes de la pile pour chaque nouvelle instance créée entre un point d’arrêt et un autre. Cela peut suivre ce qui s’est passé sous le capot avec une précision chirurgicale.
Enfin
Il y a beaucoup de choses que je n’ai pas couvertes parce qu’il y en a tellement. Je ne pense pas que VS Code soit intrinsèquement mauvais. C’est juste parti pour la simplicité. Personnellement, je me considère comme un utilisateur expérimenté. Si vous êtes comme moi, j’espère que cet article vous a donné une idée de ce que vous manquez.