Wie verwenden Sie das Direktfenster in Visual Studio?


121

Das Sofortfenster ist ein äußerst nützliches Tool zum Debuggen von Anwendungen. Es kann verwendet werden, um Code-Anweisungen auszuführen, die im Kontext eines Haltepunkts gültig sind, und um Werte zu überprüfen. Ich benutze es auch, um Codefragmente einzugeben, um Sprachfunktionen zu lernen.

Wie benutzt man das Sofortfenster?


Wenn Sie sich auf die Ausgabe einzelner Visual Studio-Befehle beziehen, finden Sie Beispiele unter [Sofortfenster] [1]. Das zeigt, wie man Ausdrücke auswertet, Anweisungen ausführt, Variablenwerte druckt usw. durch das unmittelbare Fenster. [1]: msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
TStamper

2
Es gibt einige spezielle Befehle, deren Liste schwer zu finden ist. msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx Ein Teil der Leistung von windbg ist verfügbar. Wurde verwendet, um anhand einer Adresse das nächstgelegene Symbol zu finden. (ln) Ich denke, das wurde dumm ausgeschaltet. Ich hätte gerne den Befehl dt von windbg, um die Typen in Strukturen usw. anzuzeigen. Zumindest können Sie eine Objektvariable eingeben, um alle Mitglieder in einer Liste mit ihren Werten abzurufen. (anstatt zu versuchen, einen Knoten zu öffnen, schließen Sie ein Knotenspiel.)
Kalbr

Für Visual Studio 2017 lautet der Link zur relevanten Dokumentation docs.microsoft.com/en-us/visualstudio/ide/reference/…
Pac0

Antworten:


129

Eine nette Funktion des Sofortfensters in Visual Studio ist die Möglichkeit, den Rückgabewert einer Methode auszuwerten, insbesondere wenn sie von Ihrem Clientcode aufgerufen wird, aber nicht Teil einer Variablenzuweisung ist. Wie bereits erwähnt, können Sie im Debug-Modus mit Variablen interagieren und Ausdrücke im Speicher ausführen, was eine wichtige Rolle dabei spielt.

Wenn Sie beispielsweise eine statische Methode hatten, die die Summe zweier Zahlen zurückgibt, z.

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

Dann können Sie im Direktfenster Folgendes eingeben:

? GetSum(2, 4)
6

Wie Sie sehen können, funktioniert dies sehr gut für statische Methoden. Wenn die Methode jedoch nicht statisch ist, müssen Sie mit einem Verweis auf das Objekt interagieren, zu dem die Methode gehört.

Nehmen wir zum Beispiel an, Ihre Klasse sieht so aus:

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

Wenn das Objekt bereits im Speicher vorhanden ist und sich im Gültigkeitsbereich befindet, können Sie es im Direktfenster aufrufen, solange es vor Ihrem aktuellen Haltepunkt (oder zumindest vor dem Anhalten des Codes im Debug-Modus) instanziiert wurde :

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

Wenn Sie die Methode direkt interagieren und testen möchten, ohne sich auf eine vorhandene Instanz im Speicher zu verlassen, können Sie Ihre eigene Instanz im Direktfenster instanziieren :

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

Sie können noch einen Schritt weiter gehen und die Ergebnisse der Methode vorübergehend Variablen zuweisen, wenn Sie weitere Auswertungen, Berechnungen usw. durchführen möchten.

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

Wenn Sie nicht einmal einen Variablennamen für ein neues Objekt deklarieren und nur eine seiner Methoden / Funktionen ausführen möchten, gehen Sie folgendermaßen vor:

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

Eine sehr häufige Methode, um den Wert einer Methode anzuzeigen, besteht darin, den Methodennamen einer Klasse auszuwählen und eine 'Watch hinzufügen' auszuführen, damit Sie den aktuellen Wert im Watch-Fenster sehen können. Das Objekt muss jedoch erneut instanziiert werden, damit ein gültiger Wert angezeigt werden kann. Dies ist viel weniger leistungsfähig und restriktiver als die Verwendung des Sofortfensters.

Zusammen mit den Inspektionsmethoden können Sie einfache mathematische Gleichungen erstellen:

? 5 * 6
30

oder Werte vergleichen:

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

Das Fragezeichen ('?') Ist nicht erforderlich, wenn Sie sich direkt im Direktfenster befinden. Es wird jedoch aus Gründen der Übersichtlichkeit hier eingefügt (um zwischen den eingegebenen Ausdrücken und den Ergebnissen zu unterscheiden). Wenn Sie sich jedoch im Befehlsfenster befinden und benötigen Um ein paar schnelle Dinge im Direktfenster zu erledigen, gehen Sie Ihren Aussagen mit '?' und los geht's.

Intellisense funktioniert im Direktfenster , kann aber manchmal etwas inkonsistent sein. Nach meiner Erfahrung scheint es nur im Debug-Modus verfügbar zu sein, nicht jedoch im Nicht-Debug-Modus.

Leider ist ein weiterer Nachteil des Sofortfensters, dass es keine Schleifen unterstützt.


1
Wie finden Sie das unmittelbare Fenster?
Jpaugh

1
Ctrl + Alt + Ioder Debug -> Windows -> Sofort
Ray

11

Verwenden Sie das Sofortfenster, um Befehle auszuführen

Das Direktfenster kann auch zum Ausführen von Befehlen verwendet werden. Geben Sie einfach a >gefolgt vom Befehl ein.

Geben Sie hier die Bildbeschreibung ein

Zum Beispiel >shell cmdwird eine Befehlsshell gestartet (dies kann nützlich sein, um zu überprüfen, welche Umgebungsvariablen beispielsweise an Visual Studio übergeben wurden). >clslöscht den Bildschirm.

Hier ist eine Liste von Befehlen, die so häufig verwendet werden, dass sie ihre eigenen Aliase haben: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx


2
schöner tipp. Tatsächlich lässt sich dies gut mit einem anderen Trick kombinieren, den ich verwende: >open FilenameÖffnet die ausgewählte Datei in der Lösung und vervollständigt sogar den Dateinamen.
Phillip Ngan

6

Das Direktfenster wird zum Debuggen und Auswerten von Ausdrücken, Ausführen von Anweisungen, Drucken von Variablenwerten usw. verwendet. Hier können Sie Ausdrücke eingeben, die während des Debuggens von der Entwicklungssprache ausgewertet oder ausgeführt werden sollen.

Um das Sofortfenster anzuzeigen, wählen Sie Debug> Windows> Sofort oder drücken Sie Strg-Alt-I

Geben Sie hier die Bildbeschreibung ein

Hier ist ein Beispiel mit Sofortfenster:

int Sum(int x, int y) { return (x + y);}
void main(){
int a, b, c;
a = 5;
b = 7;
c = Sum(a, b);
char temp = getchar();}

Haltepunkt hinzufügen

Geben Sie hier die Bildbeschreibung ein

Befehle aufrufen

Geben Sie hier die Bildbeschreibung ein

https://msdn.microsoft.com/en-us/library/f177hahy.aspx

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.