Protokollieren von Informationen im Ausgabefenster mithilfe von Ablaufverfolgungspunkten in Visual Studio
Mit Ablaufverfolgungspunkten können Sie Informationen im Ausgabefenster protokollieren. Hierfür können Sie Bedingungen konfigurieren, sodass der Code nicht geändert oder angehalten werden muss. Dieses Feature wird für verwaltete Sprachen (C#, Visual Basic, F#), nativen Code und Sprachen wie JavaScript und Python unterstützt.
Hinweis
Informationen zum programmgesteuerten Protokollieren von Informationen im Ausgabefenster mithilfe von .NET-APIs finden Sie unter Senden von Nachrichten an das Ausgabefenster.
Ein Beispiel sollte das Verständnis vereinfachen
Das folgende Beispielprogramm ist eine einfache for
-Schleife mit einer Zählervariable, die jedes Mal um 1 erhöht wird, wenn die Schleife eine weitere Iteration ausführt.
Das folgende Beispielprogramm ist eine einfache for
-Schleife mit einer Zählervariable, die jedes Mal um 1 erhöht wird, wenn die Schleife eine weitere Iteration ausführt.
using System.Diagnostics;
namespace Tracepoints
{
public class Program
{
public static void Main(string[] args)
{
int counter = 0;
for (int i=0; i<=10; i++)
{
counter +=1;
}
}
}
}
Festlegen von Ablaufverfolgungspunkten im Quellcode
Sie können Ablaufverfolgungspunkte festlegen, indem Sie eine Ausgabezeichenfolge unter dem Kontrollkästchen Aktion im Fenster Haltepunkteinstellungen festlegen.
Klicken Sie zunächst links auf dem Bundsteg auf die Zeilennummer, in der der Ablaufverfolgungspunkt festgelegt werden soll, um einen Ablaufverfolgungspunkt zu initialisieren.
Zeigen Sie auf den roten Kreis, und klicken Sie dann auf das Zahnradsymbol.
Daraufhin wird das Fenster Haltepunkteinstellungen geöffnet.
Aktivieren Sie das Kontrollkästchen Aktion.
Der rote Kreis ändert sich in einen Diamanten. Das bedeutet, dass der Haltepunkt in einen Ablaufverfolgungspunkt geändert wurde.
Geben Sie die Meldung ein, die Sie im Textfeld Meldung im Ausgabefenster anzeigen: protokollieren möchten. Weitere Informationen finden Sie in nachfolgenden Abschnitten in diesem Artikel.
Der Ablaufverfolgungspunkt ist damit festgelegt. Klicken Sie auf die Schaltfläche „Schließen“, wenn Sie nur einige Informationen im Ausgabefenster protokollieren möchten.
Wenn Sie Bedingungen hinzufügen möchten, die bestimmen, ob und wann Ihre Meldung angezeigt wird, aktivieren Sie das Kontrollkästchen Bedingungen.
Es gibt drei mögliche Bedingungen: Bedingter Ausdruck, Filter und Trefferanzahl.
Sie können Ablaufverfolgungspunkte festlegen, indem Sie eine Ausgabezeichenfolge unter dem Kontrollkästchen Aktion im Fenster Haltepunkteinstellungen festlegen.
Klicken Sie zunächst links auf dem Bundsteg auf die Zeilennummer, in der der Ablaufverfolgungspunkt festgelegt werden soll, um einen Ablaufverfolgungspunkt zu initialisieren.
Zeigen Sie auf den roten Kreis, und klicken Sie auf das Zahnradsymbol, um das Fenster Haltepunkteinstellungen zu öffnen.
Aktivieren Sie das Kontrollkästchen Aktion.
Der rote Kreis ändert sich in einen Diamanten. Das bedeutet, dass der Haltepunkt in einen Ablaufverfolgungspunkt geändert wurde.
Geben Sie die Meldung ein, die Sie im Textfeld Meldung im Ausgabefenster anzeigen: protokollieren möchten. Weitere Informationen finden Sie in nachfolgenden Abschnitten in diesem Artikel.
Der Ablaufverfolgungspunkt ist damit festgelegt. Klicken Sie auf die Schaltfläche „Schließen“, wenn Sie nur einige Informationen im Ausgabefenster protokollieren möchten.
Wenn Sie Bedingungen hinzufügen möchten, die bestimmen, ob und wann Ihre Meldung angezeigt wird, aktivieren Sie das Kontrollkästchen Bedingungen.
Es gibt drei mögliche Bedingungen: Bedingter Ausdruck, Filter und Trefferanzahl.
Menü „Aktionen“
Mit diesem Menü können Sie eine Meldung im Ausgabefenster protokollieren. Geben Sie die Zeichenfolgen ein, die im Meldungsfeld ausgegeben werden sollen (Anführungszeichen sind nicht erforderlich). Wenn Sie die Werte von Variablen anzeigen möchten, müssen Sie diese in geschweifte Klammern einschließen.
Wenn Sie z. B. den Wert der Variablen counter
in der Ausgabekonsole anzeigen möchten, müssen Sie {counter} im Textfeld für die Meldung eingeben.
Wenn Sie auf Schließen klicken und anschließend den Debugger für das Programm starten (F5), wird im Ausgabefenster die folgende Ausgabe angezeigt:
Sie können auch bestimmte Schlüsselwörter verwenden, um spezifischere Informationen anzuzeigen. Geben Sie das Schlüsselwort genau wie unten dargestellt ein. Schreiben Sie das Schlüsselwort in Großbuchstaben, und stellen Sie ihm $ voran.
Stichwort | Anzeige |
---|---|
$ADDRESS | Aktuelle Anweisung |
$CALLER | Aufrufen des Funktionsnamens |
$CALLSTACK | Aufrufliste |
$FUNCTION | Name der aktuellen Funktion |
$PID | Prozess-ID |
$PNAME | Prozessname |
$TID | Thread-ID |
$TNAME | Threadname |
$TICK | Taktanzahl (von Windows GetTickCount) |
Mit diesem Menü können Sie eine Meldung im Ausgabefenster protokollieren. Geben Sie die Zeichenfolgen ein, die im Meldungsfeld ausgegeben werden sollen (Anführungszeichen sind nicht erforderlich). Wenn Sie die Werte von Variablen anzeigen möchten, müssen Sie diese in geschweifte Klammern einschließen.
Wenn Sie beispielsweise den Wert der Variablen counter
in der Ausgabekonsole anzeigen möchten, müssen Sie {counter}
in das Textfeld für die Meldung eingeben.
Wenn Sie auf Schließen klicken und anschließend den Debugger für das Programm starten (F5), wird im Ausgabefenster die folgende Ausgabe angezeigt:
Sie können auch bestimmte Schlüsselwörter verwenden, um spezifischere Informationen anzuzeigen. Geben Sie das Schlüsselwort genau wie unten dargestellt ein. Schreiben Sie das Schlüsselwort in Großbuchstaben, und stellen Sie ihm $ voran.
Stichwort | Anzeige |
---|---|
$ADDRESS |
Aktuelle Anweisung |
$CALLER |
Aufrufen des Funktionsnamens |
$CALLSTACK |
Aufrufliste |
$FUNCTION |
Name der aktuellen Funktion |
$PID |
Prozess-ID |
$PNAME |
Prozessname |
$TID |
Thread-ID |
$TNAME |
Threadname |
$TICK |
Taktanzahl (von Windows GetTickCount) |
Menü „Bedingungen“
Mit Bedingungen können Sie Ihre Ausgabemeldungen filtern, sodass sie nur in bestimmten Fällen angezeigt werden. Dabei stehen Ihnen drei Überkategorien für Bedingungen zur Verfügung.
Bedingter Ausdruck
Mit einem bedingten Ausdruck wird eine Ausgabemeldung nur angezeigt, wenn bestimmte Bedingungen erfüllt sind.
Bei diesen können Sie den Ablaufverfolgungspunkt so festlegen, dass eine Meldung ausgegeben wird, wenn eine bestimmte Bedingung erfüllt ist oder sich geändert hat. Wenn Sie z. B. nur den Wert des Zählers während der Iterationen der for
-Schleife anzeigen möchten, können Sie die Option Trifft zu auswählen und dann i%2 == 0
in das Textfeld für die Meldung eingeben.
Wenn Sie den Wert des Zählers ausgeben möchten, wenn sich die Iterationen der for
-Schleife ändert, wählen Sie die Option Bei Änderung aus, und geben Sie i
in das Textfeld für die Meldung ein.
Das Verhalten der Option Bei Änderung unterscheidet sich je nach Programmiersprache.
- Bei nativem Code wird die erste Auswertung der Bedingung vom Debugger nicht als Änderung betrachtet. Der Ablaufverfolgungspunkt wird also bei der ersten Auswertung nicht beachtet.
- Bei verwaltetem Code wird der Ablaufverfolgungspunkt bei der ersten Auswertung beachtet, wenn Bei Änderung festgelegt ist.
Mehr gültige Ausdrücke beim Festlegen von Bedingungen finden Sie unter Ausdrücke im Debugger.
Mit einem bedingten Ausdruck wird eine Ausgabemeldung nur angezeigt, wenn bestimmte Bedingungen erfüllt sind.
Bei diesen können Sie den Ablaufverfolgungspunkt so festlegen, dass eine Meldung ausgegeben wird, wenn eine bestimmte Bedingung erfüllt ist oder sich geändert hat. Wenn Sie z. B. nur den Wert des Zählers während der Iterationen der for
-Schleife anzeigen möchten, können Sie die Option Trifft zu auswählen und dann i%2 == 0
in das Textfeld für die Meldung eingeben.
Wenn Sie den Wert des Zählers ausgeben möchten, wenn sich die Iterationen der for
-Schleife ändert, wählen Sie die Option Bei Änderung aus, und geben Sie i
in das Textfeld für die Meldung ein.
Das Verhalten der Option Bei Änderung unterscheidet sich je nach Programmiersprache.
- Bei nativem Code wird die erste Auswertung der Bedingung vom Debugger nicht als Änderung betrachtet. Der Ablaufverfolgungspunkt wird also bei der ersten Auswertung nicht beachtet.
- Bei verwaltetem Code wird der Ablaufverfolgungspunkt bei der ersten Auswertung beachtet, wenn Bei Änderung festgelegt ist.
Sie können die Bedingung auch festlegen, wenn der Ablaufverfolgungspunkt aktiviert werden kann, indem Sie einen Haltepunkt in einen bestimmten Abschnitt des Codes einfügen und das Kontrollkästchen Nur aktivieren, wenn folgender Haltepunkt erreicht wird: im Menü Haltepunkteeinstellungen aktivieren. Sie können einen beliebigen Haltepunkt in der Liste mit den Auswahlmöglichkeiten auswählen.
Mehr gültige Ausdrücke beim Festlegen von Bedingungen finden Sie unter Ausdrücke im Debugger.
Trefferanzahl
Mit der Bedingung „Trefferanzahl“ können Sie festlegen, dass die Ausgabe nur gesendet wird, wenn für die Codezeile mit dem Ablaufverfolgungspunkt eine bestimmte Anzahl Ausführungen ermittelt wurde.
Für die Trefferanzahl können Sie eine Meldung ausgeben, wenn für die Codezeile mit dem Ablaufverfolgungspunkt eine bestimmte Anzahl Ausführungen ermittelt wurde. Je nach Anforderung kann sie gleich oder ein Vielfaches oder größer oder gleich dem angegebenen Wert für die Trefferanzahl sein. Wählen Sie die für Sie passende Option aus, und geben Sie einen Integerwert wie 5 in das Feld ein, der für die gewünschte Iteration steht.
Mit der Bedingung „Trefferanzahl“ können Sie festlegen, dass die Ausgabe nur gesendet wird, wenn für die Codezeile mit dem Ablaufverfolgungspunkt eine bestimmte Anzahl Ausführungen ermittelt wurde.
Für die Trefferanzahl können Sie eine Meldung ausgeben, wenn für die Codezeile mit dem Ablaufverfolgungspunkt eine bestimmte Anzahl Ausführungen ermittelt wurde. Je nach Anforderung kann sie gleich oder ein Vielfaches oder größer oder gleich dem angegebenen Wert für die Trefferanzahl sein. Wählen Sie die für Sie passende Option aus, und geben Sie einen Integerwert wie 5 in das Feld ein, der für die gewünschte Iteration steht.
Sie können den Haltepunkt auch beim ersten Treffer entfernen, indem Sie das Kontrollkästchen Haltepunkt nach Erreichen entfernen aktivieren.
Filtern
Bei einer Filterbedingung legen Sie fest, für welche Geräte, Prozesse oder Threads eine Ausgabe angezeigt wird.
Filterausdrücke:
- MachineName = "name"
- ProcessId = value
- ProcessName = "name"
- ThreadId = value
- ThreadName = "name"
Schließen Sie Zeichenfolgen (wie Namen) in doppelte Anführungszeichen ein. Werte können ohne Anführungszeichen eingegeben werden. Sie können Klauseln mit &
(AND
), ||
(OR
), !
(NOT
) und Klammern kombinieren.
Bei einer Filterbedingung legen Sie fest, für welche Geräte, Prozesse oder Threads eine Ausgabe angezeigt wird.
Filterausdrücke:
MachineName
= "Name"ProcessId
= WertProcessName
= "Name"ThreadId
= WertThreadName
= "Name"
Schließen Sie Zeichenfolgen (wie Namen) in doppelte Anführungszeichen ein. Werte können ohne Anführungszeichen eingegeben werden. Sie können Klauseln mit &
(AND
), ||
(OR
), !
(NOT
) und Klammern kombinieren.
Weitere Überlegungen
Ablaufverfolgungspunkte sollen das Debuggen zwar übersichtlicher und reibungsloser gestalten, aber es muss bei deren Verwendung einiges beachtet werden.
Wenn Sie eine Eigenschaft oder ein Attribut eines Objekts überprüfen, kann sich dessen Wert manchmal ändern. Wenn sich der Wert während der Überprüfung ändert, wird der Fehler jedoch nicht vom Feature für Ablaufverfolgungspunkte verursacht. Die Verwendung von Ablaufverfolgungspunkten verhindert aber nicht, dass Werte bei der Überprüfung von Objekten versehentlich geändert werden.
Die Auswertung von Ausdrücken im Meldungsfeld Aktion kann sich von der Sprache unterscheiden, die Sie für die Entwicklung verwenden. Wenn Sie beispielsweise eine Zeichenfolge ausgeben möchten, müssen Sie eine Meldung nicht in Anführungszeichen einschließen, auch wenn das bei Debug.WriteLine()
oder console.log()
normalerweise erforderlich wäre. Außerdem kann sich die Syntax für geschweifte Klammern ({ }
) in Ausgabeausdrücken von der Konvention zum Ausgeben von Werten in der Entwicklungssprache unterscheiden. Der Inhalt der geschweiften Klammern ({ }
) sollte jedoch immer noch der Syntax Ihrer Entwicklungssprache entsprechend geschrieben werden.
Wenn Sie eine Liveanwendung debuggen und nach einem ähnlichen Feature suchen, können Sie sich das Feature für Protokollpunkte im Momentaufnahmedebugger ansehen. Der Momentaufnahmedebugger ist ein Tool, mit dem Probleme in Produktionsanwendungen untersucht werden können. Mit Protokollpunkten können Sie auch Meldungen an das Ausgabefenster senden, ohne den Quellcode ändern zu müssen oder die ausgeführte Anwendung zu beeinträchtigen. Weitere Informationen finden Sie unter Debuggen einer Azure-Liveanwendungen.