70 votes

Trucs et astuces du débogueur de Visual Studio pour .NET

Je travaille depuis des années avec le débogueur de VS, mais de temps en temps, je tombe sur une fonctionnalité que je n'avais jamais remarquée auparavant, et je me dis "Bon sang ! Comment ai-je pu manquer ça ? C'est donc utile !"

[Avertissement : ces conseils fonctionnent dans VS 2005 sur un projet C#, aucune garantie pour les incarnations plus anciennes de VS ou d'autres langages].

Garder la trace des instances d'objets

Vous travaillez avec plusieurs instances d'une même classe ? Comment les distinguer ? Avant l'avènement de la collecte des déchets, il était facile de garder la trace des références - il suffisait de regarder l'adresse mémoire. Avec .NET, ce n'est plus possible : les objets peuvent être déplacés. Heureusement, la vue des montres vous permet de faire un clic droit sur une montre et de sélectionner "Make Object ID".

watches view

Cela ajoute un {1#}, {2#} etc. après la valeur de l'instance, donnant ainsi à l'instance un label unique. Cela ressemble à ceci :

numbered instance

L'étiquette est conservée pendant toute la durée de vie de l'objet.

Valeurs significatives pour les variables surveillées

Par défaut, la valeur d'une variable surveillée est son type. Si vous voulez voir ses champs, vous devez la développer, et cela peut prendre beaucoup de temps (ou même un délai d'attente !) s'il y a beaucoup de champs ou s'ils font quelque chose de compliqué.

Cependant, certains types prédéfinis présentent des informations plus significatives :

  • les chaînes de caractères affichent leur contenu réel
  • les listes et les dictionnaires indiquent le nombre de leurs éléments, etc.

meaningful info

Ce ne serait pas bien d'avoir ça pour mes propres types ?

Hmm...

...un peu de temps de qualité avec .NET Reflector montre à quel point il est facile d'y parvenir avec l'outil d'analyse de l'environnement. DebuggerDisplay sur mon type personnalisé :

[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
    public string Name { get { ... } }
    ...
}

... réexécuté, et...

ta da!

Il y a beaucoup plus d'informations sur le sujet ici : MSDN

Rupture sur toutes les exceptions

... même ceux qui sont gérés en code ! Je sais, je suis un tel n00b pour ne pas avoir su cela depuis que je suis né, mais voilà quand même - peut-être que cela aidera quelqu'un un jour :

Vous pouvez forcer un processus débogué à passer en mode débogage chaque fois qu'une exception est levée. Vous avez déjà passé des heures à chercher un bug pour tomber sur un bout de code comme celui-ci ?

try {
    runStrangeContraption();
} catch(Exception ex) {
    /* TODO: Will handle this error later */
}

La capture de toutes les exceptions est vraiment pratique dans ces cas-là. Ceci peut être activé à partir de Debug > Exceptions... (Ctrl-Alt-E) . Cochez les cases de la colonne "Thrown" pour chaque type d'exception dont vous avez besoin.


Ce sont des moments où j'ai dû me frapper le front. Voulez-vous partager les vôtres ?

19voto

plinth Points 26817
try {
    // do something big
}
catch {
    // breakpoint set here:
    throw CantHappenException("something horrible happened that should never happen.");
}

Comment voir l'exception qui a été lancée à l'origine ? Dans une fenêtre de surveillance, entrez $exception

17voto

Cristi Diaconescu Points 7955

Voici une autre astuce que j'ai apprise :

System.Diagnostics.Debugger.Break()

fait en sorte que le débogueur s'arrête sur l'instruction suivante. Le site vraiment Ce qui est bien, c'est que cela fonctionne aussi pour un programme compilé en Communiqué de presse mode, sans informations de débogage.

12voto

Jon Tackabury Points 10999

Je m'assure toujours de définir la propriété "Name" sur les nouveaux fils que je crée. Ainsi, lorsque je débogue, je peux plus facilement identifier les différents threads.

9voto

Brian Points 82719

Bien sûr, consultez le conseil VS du jour :

http://blogs.msdn.com/SaraFord/

7voto

Atanas Korchev Points 20945

Quelques-uns de moi

  • Décochez l'option "Activer seulement mon code" dans Outils->Options->Débogage.
  • Points d'arrêt conditionnels - ils me sauvent la vie presque tous les jours
  • Utiliser la source du cadre .NET si les choses tournent mal

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X