133 votes

Comment utiliser la fenêtre immédiate dans Visual Studio ?

La fenêtre immédiate est un outil extrêmement utile pour le débogage des applications. Vous pouvez l'utiliser pour exécuter des instructions de code qui sont valides dans le contexte de votre point d'arrêt et inspecter les valeurs. Je l'utilise également pour saisir des extraits de code afin d'apprendre les caractéristiques du langage.

Comment utilisez-vous la fenêtre immédiate ?

141voto

Ray Vega Points 30187

Une caractéristique intéressante de la fenêtre immédiate de Visual Studio est sa capacité à évaluer la valeur de retour d'une méthode, en particulier si elle est appelée par votre code client mais qu'elle est no une partie d'une affectation de variable. En mode Debug, comme mentionné, vous pouvez interagir avec les variables et exécuter des expressions en mémoire, ce qui joue un rôle important.

Par exemple, si vous aviez une méthode statique qui renvoie la somme de deux nombres comme :

private static int GetSum(int a, int b)
{
    return a + b;
}

Ensuite, dans la fenêtre immédiate, vous pouvez taper ce qui suit :

? GetSum(2, 4)
6

Comme vous pouvez le constater, cela fonctionne très bien pour les méthodes statiques. Cependant, si la méthode n'est pas statique, vous devez interagir avec une référence à l'objet auquel la méthode appartient.

Par exemple, disons que voici à quoi ressemble votre classe :

private class Foo
{
    public string GetMessage()
    {
        return "hello";
    }
}

Si l'objet existe déjà en mémoire et qu'il est dans le champ d'application, vous pouvez l'appeler dans la fenêtre immédiate à condition qu'il ait été instancié. antes de votre point d'arrêt actuel (ou, au moins, avant l'endroit où le code est mis en pause en mode débogage) :

? foo.GetMessage(); // object ‘foo’ already exists
"hello"

De plus, si vous souhaitez interagir et tester la méthode directement sans vous appuyer sur une instance existante en mémoire, vous pouvez alors instancier votre propre dans la fenêtre immédiate :

? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"

Vous pouvez aller plus loin et affecter temporairement les résultats de la méthode à des variables si vous souhaitez effectuer d'autres évaluations, calculs, etc :

? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"

De plus, si vous ne voulez même pas déclarer un nom de variable pour un nouvel objet et que vous voulez juste exécuter une de ses méthodes/fonctions, faites ceci :

? new Foo().GetMessage()
"hello"

Une façon très courante de voir la valeur d'une méthode est de sélectionner le nom de la méthode d'une classe et d'effectuer un 'Add Watch' afin de voir sa valeur actuelle dans la fenêtre Watch. Cependant, une fois encore, l'objet doit être instancié et dans le champ d'application pour qu'une valeur valide soit affichée. Cette méthode est beaucoup moins puissante et plus restrictive que l'utilisation de la fenêtre immédiate.

En plus des méthodes d'inspection, vous pouvez effectuer des équations mathématiques simples :

? 5 * 6
30

ou de comparer des valeurs :

? 5==6
false
? 6==6
true

Le point d'interrogation ('?') n'est pas nécessaire si vous êtes directement dans la fenêtre immédiate, mais il est inclus ici pour des raisons de clarté (pour faire la distinction entre les expressions tapées et les résultats). Cependant, si vous êtes dans la fenêtre de commande et que vous avez besoin d'effectuer quelques opérations rapides dans la fenêtre immédiate, faites précéder vos instructions de ' ?

Intellisense fonctionne dans la fenêtre immédiate mais il peut parfois être un peu incohérent. D'après mon expérience, elle semble être disponible uniquement en mode débogage, mais pas en mode conception, non débogage.

Malheureusement, un autre inconvénient de la fenêtre immédiate est qu'elle ne supporte pas les boucles.

3voto

TStamper Points 17163

Si vous souhaitez émettre des commandes Visual Studio individuelles, consultez le site suivant Fenêtre immédiate pour des exemples. Ils montrent comment évaluer des expressions, exécuter des instructions, imprimer des valeurs de variables, etc. à travers la fenêtre immédiate.

2voto

kalbr Points 74

Il existe des commandes spéciales dont il est difficile de trouver la liste.

http://msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx

Une partie de la puissance de windbg est disponible. Utilisé pour être capable, étant donné une adresse, de trouver le symbole le plus proche. (ln) Je pense que ça a été stupidement désactivé.

J'aimerais avoir la commande dt de windbg pour afficher les types dans les structs, etc.

Au moins, vous pouvez taper une variable objet pour obtenir tous les membres d'une liste avec leurs valeurs. (plutôt que d'essayer de jouer au jeu de l'ouverture d'un nœud et de la fermeture d'un nœud).

-2voto

Je l'utilise moins maintenant que par le passé. Il est parfois utile de modifier la valeur d'une variable ou d'inspecter des objets. Cela peut aussi être fait par la fenêtre de surveillance, donc j'ai tendance à l'utiliser plus souvent.

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