Ozcode v2

Je vous avais déjà parlé d’OzCode, un plugin de débug pour Visual Studio il y a un peu plus d’un an. J’avais trouvé l’outil intéressant, malgré quelques défauts d’ergo un peu gênants. La v2 est sortie voici quelques semaines, et je me suis dit que ce serait intéressant d’y remettre le nez, et de voir ce qu’il en était.

La première bonne nouvelle, c’est que le principal défaut d'ergonomie, à savoir devoir basculer d’un mode standard à un mode enhanced en fonction des fonctionnalités désirées, n’existe plus. Et mieux encore, l’affichage en surimpression des informations de débug a été amélioré. Ca s’annonce donc bien. Commençons par une vidéo d’intro mettant en valeur les principales fonctionnalités :

Head up display

Les principales fonctionnalités de l’outil sont maintenant regroupées sous le terme de “Head up display”, qui consiste comme son nom l’indique à afficher au développeur des information intéressantes en phase de debug. Ex :

image

On retrouve ici plusieurs informations :

  • une coche verte m’indique si mon if retourne vrai ou faux
  • sur la ligne en cours, OzCode pré-calcule les valeurs de retour de mes méthodes, ce qui permet d’afficher en surimpression en vert ou en route quelles valeurs de mon instruction if sont correctes ou non.
  • la flèche jaune m’indique quelle sera la prochaine ligne exécutée
  • les autres branches sont grisées

En cliquant sur la paire de lunettes 2 lignes plus haut, je peux à nouveau afficher ces informations, et donc étudier a posteriori ce qui s’est passé à l’exécution sans nécessairement ré-exécuter ces lignes :

image

Et pour ne rien gâcher, OzCode se comporte bien en Edit & Continue. Je peux modifier mon code, et les informations de mettent à jour automatiquement.

image

Seul bémol pour le moment : l’affichage avec Visual Studio en mode sombre est moins bien géré qu’en mode clair.

Navigation et gestion des exceptions

image

C’est toujours fastidieux de naviguer dans les exceptions impriquées. OzCode tente de répondre à l’aide de cet écran assez pratique. Et une fois qu’on a localisé l’exception qui nous intéresse, on peut lancer une recherche sur cette dernière sur Google, StackOverflow, MSDN ou Bing :

image

Malheureusement, pas de gestion des AggregateExceptions.

Une autre fonctionnalité sympa est la prédiction d’exceptions :

image

Dans cet exemple, OzCode nous dit qu’une NullReferenceException est sur le point de se produire. Ce qui nous autorise à éditer et corriger le code avant que l’exception ne soit levée. Deux remarques quant à cette feature :

  • la détection ne fonctionne que dans certains cas. Par exemple, si j’écris ceci, la détection ne fonctionne pas. Si postsFromDatabase est null, OzCode est incapable de prédire l’erreur. Alors que si postsFromDatabase est une liste vide, la prédiction fonctionne.
  • De même si j’appelle First() plutôt que FirstOrDefault(), que ce soit sur une liste null ou vide, la levée d’exception n’est pas détectée.
  • une vraie killer feature serait de proposer un fix façon Roslyn ou Resharper, de façon à ajouter un test de nullité par exemple.

Ajout de traces à la volée

Vous vous êtes sûrement déjà retrouvés dans un cas où des logs seraient utiles, mais complexes à mettre en oeuvre pour corriger un bug spécifique. OzCode propose d’y remédier de la façon suivante :

image

image

Vous noterez donc la prévisualisation et l'IntelliSense (la rédaction adore !). Et les résultats s’affichent dans une fenêtre dédiée :

image

Les résultats sont triables et filtrables. On y retrouve la date, l’ID du processus (pratique dans le cas de multithreading, le message paramétré plus haut et la StackTrace complète. Et on a même un export Excel.

Autres fonctionnalités

Dans le premier article, les fonctionnalités de manipulation de listes d’objets m’avaient bien aidé. Dans la doc de OzCode, elles s’appellent Search, Foresee, Reveal, et Compare. Elles sont évidemment toujours présentes dans la v2.

Les assistants de création de points d’arrêt conditionnels sont toujours de la partie et servent à rendre ces derniers plus accessibles. Etonnant que rien n’ait encore été fait nativement dans Visual Studio.

Idem pour la fonctionnalité QuickAttach, si on passe beaucoup de temps à s’attacher à certains process (type Visual Studio ou IIS…).

Conclusion

La V2 de OzCode est une grosse et chouette mise à jour. Les principaux soucis ont été corrigés, et le produit y gagne beaucoup. Tout n’est pas encore parfait, mais le plugin est déjà efficace. L’overhead d’OzCode me parait acceptable, même s’il faudrait le tester sur de très grosses solutions.