2008-09-25 8 views
33

Autant que je n'aime généralement pas la discussion/messages subjectifs sur SO, j'ai vraiment appris à apprécier les "Hidden Secrets" ensemble de messages que les gens ont mis ensemble. Ils fournissent une excellente vue d'ensemble de certains outils couramment manqués que vous pourriez maintenant découvrir autrement."Secrets cachés" du débogueur Visual Studio .NET?

Pour cette question, je voudrais explorer le débogueur Visual Studio .NET. Quels sont certains des "secrets cachés" dans le débogueur VS.NET que vous utilisez souvent ou récemment découvert et que vous auriez aimé connaître depuis longtemps?

Répondre

9

$exception$exception dans la fenêtre de surveillance affichera l'exception en cours de traitement même si vous ne disposez pas d'une capture qui affecte l'instance Exception à une variable nommée.

+8

Pas besoin de le mettre dans les montres, il apparaîtra comme le premier élément dans les fenêtres locales automatiquement. –

4

Quelques touches de raccourci utiles.

  • F11 d'entrer dans une méthode.
  • Shift-F11 pour sortir d'une méthode.
  • F10 pour passer au-dessus d'une méthode.
11

En tant que développeur Web qui travaille avec les services Web qui sont dans la même solution que mon code frontal la plupart du temps, j'ai trouvé que la possibilité de "attach" to a process était un énorme gain de temps. Avant de trouver cette gemme cachée, je devais toujours définir un point d'arrêt sur un code frontal qui appelait une méthode de service Web et y pénétrer. Maintenant que je connais cette astuce/fonctionnalité, je peux facilement définir des points d'arrêt sur n'importe quelle partie de mon code, ce qui me permet d'économiser beaucoup de temps et d'efforts.

+1

Pour les applications de bureau, je trouve très utile de lancer une boîte de message ou de mettre en veille des threads dans des zones qui ne peuvent pas être pointées, puis de les attacher au processus. –

+3

@ j0rd4n: Si vous pouvez ajouter un MessageBox, cela signifie que vous pouvez ajouter du code, ce qui signifie que vous pouvez également utiliser 'Debugger.Break()' pour programmer un point d'arrêt. – Abel

5

C'est un peu vieux. Si vous ajoutez une expression de contrôle err,hr, le résultat de GetLastError(), formaté en tant que HRESULT (débogueur VC++ uniquement), sera conservé.

22

Une de mes fonctionnalités préférées est l'option "When Hit..." disponible sur un point d'arrêt. Vous pouvez imprimer un message avec la valeur d'une variable ainsi que beaucoup d'autres informations, telles que:

  • $ADDRESS - Instruction actuelle
  • $CALLER - Fonction précédente Nom
  • $CALLSTACK - Appel Stack
  • $FUNCTION - Nom de la fonction en cours
  • $PID - ID de processus
  • $PNAME - Nom du processus
  • $TID - ID de thread
  • $TNAME - Discussion Nom

Vous pouvez également le faire exécuter une macro, mais je n'ai jamais utilisé cette fonctionnalité.

7

Vous pouvez charger les extensions windbg dans le débogueur Visual Studio et les utiliser depuis la fenêtre immédiate.

18

Pour les applications .net System.Diagnostics a beaucoup de choses de débogage utiles. La classe par exemple Debugger:

Debugger.Break(); // Programmatically set a break point 
Debugger.Launch(); // Launch the debugger if not already attached 
Debugger.IsAttached // Check if the debugger is attached 

System.Diagnostics a aussi beaucoup de bons attributs. Les deux que je l'ai utilisé sont l'attribut d'affichage du débogueur pour changer les détails mis dans la fenêtre des locaux et l'étape par attribut pour le code à sauter vous ne se soucient pas de mise au point:

// Displays the value of Property1 for any "MyClass" instance in the debugger 
[DebuggerDisplay("{Property1}")] 
public class MyClass { 
    public string Property1 { get; set; } 

    [DebuggerStepThrough] 
    public void DontStepInto() { 
     // An action we don't want to debug 
    } 
} 
9
  • La fenêtre de threads, de débogage -> Windows -> Fils. Vous pouvez geler et décongeler des threads et changer le thread actif. C'est génial lors du débogage ou de la réplication d'un problème avec une application multithread.
  • Vous pouvez faire glisser & déposer la flèche jaune "Déclaration suivante" à un autre endroit. Lorsque le programme reprend, il reprend l'exécution à cette instruction. Vous pouvez l'ajouter à la barre d'outils, une flèche bleue appelée Définir l'instruction suivante, mais elle n'est pas présente par défaut.
  • Vous pouvez "défaire" la navigation que vous avez faite, comme le défilement, l'accès à un autre fichier ou le saut vers une référence. Le raccourci est ctrl-- (contrôle moins.) De cette façon, vous pouvez sauter dans une fonction, examiner le code là-bas, et revenir à l'endroit où vous étiez sans regarder.
+1

au point # 2, vous pouvez aussi cliquer avec le bouton droit sur une ligne de code et choisir "set next statement" et déplacer le point d'exécution sur cette ligne. – CodingWithSpike

+1

L'utilisation de Ctrl + 'et Ctrl-Maj-' (Ctrl-Minus, Ctrl + Maj-Minus) est un raccourci clavier pour * Naviguer vers l'arrière/vers l'avant *, qui peut également être ajouté à la barre d'outils. Ils n'ont cependant rien à voir avec le débogage et peuvent toujours être utilisés dans Visual Studio. – Abel

18

Vous pouvez cliquer avec le bouton droit sur un objet dans la fenêtre Espion et cliquer sur Créer un identifiant d'objet.

Il attribuera à cette instance un numéro d'identification, ce qui vous permettra de voir, dans un graphe d'objets compliqué, quels objets se réfèrent à la même instance.

+6

Plus important encore, il vous montrera le contenu de l'objet * même s'il ne se trouve pas dans la pile d'appels actuelle *. Vous devez taper l'ID (par exemple "1 #") dans la ligne vide au bas de la fenêtre de la montre. –

4

choses que j'utilise souvent:

  • Cliquez sur l'élément de menu "debug | Exceptions" (ou Ctrl-D, E pour faire court) et vous pouvez activer la rupture au moment que toute exception est levée, ou choisissez de ne pas casser certaines exceptions.

  • Vous pouvez configurer le débogueur pour qu'il télécharge le code source et les symboles d'un serveur MS et qu'il entre dans le code du châssis. (Certaines bibliothèques, comme System.ServiceModel, ne sont pas encore disponibles). Il dans les fenêtres Options sous le débogage. Voir MSDN How-To.

  • Vous pouvez utiliser le débogueur VS.NET pour déboguer Javascript dans IE. Vous avez juste besoin d'installer le débogueur JavaScript javascript et d'activer le débogage javascript dans les paramètres d'Internet Explorer. Ensuite, lors d'une erreur JS, une boîte de dialogue "Voulez-vous déboguer" apparaît et vous pouvez choisir de déboguer dans VS.NET.

5

Vous pouvez faire glisser le curseur de ligne en cours (flèche jaune) de haut en bas lorsque votre exécution est en pause.

De plus, pour activer ceci pendant une pause sur exception, vous devez d'abord cliquer sur "Activer l'édition" sur les détails de l'exception.

Vous pouvez également faire pause VS sur les exceptions traitées en cochant son d'intérêt sous: Debug-> Exceptions: colonne Jeté

1

Vous pouvez ouvrir et placer un point d'arrêt dans un fichier source si le fichier appartient à une autre solution (fichier externe). Le débogueur peut toujours atteindre le point d'arrêt. Pas besoin d'ouvrir une autre instance de Visual Studio pour déboguer le fichier externe. Utile dans le débogage des services Web auxquels vous vous adressez. Cela fonctionne tant que toutes les sources sont à jour et compilées.

Questions connexes