Allgemeine Ausdrucksauswertungsfeatures
Dieses Thema gilt für folgende Anwendungsbereiche:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro, Premium und Ultimate |
In diesem Thema werden die verschiedenen Ausdrucksauswertungsfeatures beschrieben, die im Debugger allgemein üblich sind und sich von Sprache zu Sprache unterscheiden.
Implizite Variablen
In Visual Basic und C# können Sie implizite Variablen mithilfe der Ausdrucksauswertung erstellen. Diese impliziten Variablen bleiben immer innerhalb des Gültigkeitsbereichs und können wie jede andere Variable behandelt werden.
In C# können Sie eine implizite Variable erstellen, indem Sie diese Variable in der Ausdrucksauswertung deklarieren. Sie können zum Beispiel den folgenden C#-Code in das Direktfenster eingeben:
int b = 100;
Wenn Sie diesen Code im Direktfenster ausführen, wird die neue implizite Variable im Fenster Lokal mit einem Dollarzeichen ($) vor dem Variablennamen angezeigt, in diesem Fall $b.
In Visual Basic können Sie keine impliziten Variablen im Ausdrucksauswerter deklarieren. Wenn Sie jedoch eine nicht deklarierte Variable in der Ausdrucksauswertung von Visual Basic verwenden, wird automatisch eine implizite Variable erstellt. In Visual Basic werden implizite Variablen nicht im Fenster Lokal aufgelistet.
Haltepunkte
Wenn Sie mithilfe des Direktfensters eine Methode oder Funktion in Visual Basic oder C# auswerten, die einen Haltepunkt enthält, wird ein neuer Rahmen in der Aufrufliste angezeigt, sobald dieser Haltepunkt erreicht wird. Im Folgenden finden Sie ein Beispiel für C#:
class Program
{
static void Main(string[] args)
{
// Breakpoint here:
int a = 20;
}
}
Wenn Sie dem Kommentar folgend einen Haltepunkt festlegen und das Programm durch Drücken von F5 kompilieren und ausführen, erreichen Sie den Haltepunkt auf normale Art und Weise. Wenn Sie nun die Main-Methode auswerten, indem Sie Program.Main(null) in das Direktfenster eingeben, wird der Haltepunkt zum zweiten Mal erreicht, und es wird ein Eintrag für diese Methode in der Aufrufliste erstellt.
Auswerten im Überwachungsfenster
Um mögliche unerwünschte Nebeneffekte zu vermeiden, wird ein Funktionsaufruf bzw. ein Methodenaufruf nicht automatisch bei jedem Debuggersprung ausgewertet. Stattdessen können Sie das Ergebnis über ein Symbol manuell aktualisieren. Es wird in der Spalte Wert angezeigt. Dies ermöglicht Ihnen die manuelle Auswertung des Aufrufs. Weitere Informationen finden Sie unter Nebeneffekte und Ausdrücke.
Objektidentität
Dieses Feature ist nicht für Visual Basic verfügbar.
Einige Anwendungen erstellen von einer Klasse viele Instanzen. In diesen Anwendungen ist oft ein Bezeichner sinnvoll, um eine bestimmte Instanz einer Klasse zu kennzeichnen. Ein Bezeichner ist z. B. dann nützlich, wenn sich eine bestimmte Instanz der Klasse nicht wie angenommen verhält oder eine bestimmte Instanz mehr als einmal in eine Auflistung eingefügt wurde, in der sie eigentlich nur einmal enthalten sein sollte.
Systemeigene Objektidentität
Beim Debuggen von nicht verwaltetem Code können Sie ein Objekt anhand der Adresse eindeutig identifizieren. Dies ist aus zwei Gründen wichtig:
Sie können ein Objekt allein anhand seiner Adresse verfolgen. Gleichzeitig kann die Adresse auch verwendet werden, um
den Wert des Objekts an dieser Adresse anzuzeigen.
Gleichheitsüberprüfungen durchzuführen. Oft kann die Adresse eines Objekts auf dieselbe Weise verwendet werden wie die Objektvariable.
Sie können die Adresse eines Objekts (die Instanz) verwenden, um einen Haltepunkt an einer Methode in dieser bestimmten Instanz zu setzen.
Angenommen, Sie haben beispielsweise ein Objekt, das eine Instanz der Klasse CMyType ist und die Adresse 0xcccccccc hat. Dann können Sie in der Methode aMethod dieser Instanz wie folgt einen Funktionshaltepunkt angeben:
((CMyType *) 0xcccccccc)->aMethod
Verwaltete Objektidentität
Bei verwaltetem Code können Sie ein Objekt nicht anhand der Adresse identifizieren. Stattdessen verwenden Sie einen als Objekt-ID benannten ganzzahligen Wert, der von den Debugdiensten der CLR (Common Language Runtime) generiert und dem Objekt zugeordnet wurde. Diese Zahl ist eine positive ganze Zahl, die von den Debugdiensten der CLR generiert wurde. Der Objekt-ID-Wert hat ausschließlich die Aufgabe, das Objekt eindeutig zu identifizieren.
Die Objekthandles werden als ganze Dezimalzahlen mit variabler Länge angezeigt. Dabei befindet sich hinter der Zahl ein Nummernzeichen #, und es wird keine 0 vorangestellt, zum Beispiel 5#. Die Handles werden in der Spalte Wert der verschiedenen Debuggerdatenfenster angezeigt.
Um eine Objekt-ID für eine Variable zu erstellen, klicken Sie mit der rechten Maustaste auf die Variable und wählen Objekt-ID erstellen aus. Der Debugger zeigt daraufhin eine Zahl mit angefügtem Rautenzeichen (#) an, z. B. 123#. Um eine Objekt-ID zu löschen, klicken Sie mit der rechten Maustaste auf die Variable, und wählen Sie Objekt-ID löschen aus.
Wenn ein Haltepunkt erreicht wird, können Sie das Handle einer Variablen in das Fenster Überwachen eingeben. Der Debugger zeigt den Wert der Objekt-ID an, und Sie können diesen Wert genau wie bei jeder anderen Variablen erweitern und überprüfen.
Sie können die Objekt-ID verwenden, um einen Haltepunkt auf einer Methode einer bestimmten Instanz festzulegen. Beispiel: Sie verfügen über ein Objekt, das einer Instanz der CMyType-Klasse entspricht. Die Instanz hat die Objekt-ID 5#. Die Klasse CMyType beinhaltet eine Methode aMethod. Sie können nun in der Methode aMethod der Instanz 5# wie folgt einen Funktionshaltepunkt angeben:
((CMyType) 5#).aMethod
Sie können auch die Objekt-ID in einer Haltepunktbedingung verwenden. Das folgende Beispiel zeigt, wie Sie die Objekt-ID in einer Bedingung testen können.
this == 5#
Informationen über das Angeben einer Haltepunktbedingung finden Sie unter Gewusst wie: Angeben einer Haltepunktbedingung.
Siehe auch
Konzepte
Anzeigen von Daten im Debugger