Einführung in Instrumentation und Ablaufverfolgung

Der Begriff Instrumentation bezeichnet die Fähigkeit, die Leistung eines Produkts zu überwachen oder zu messen und Fehler zu diagnostizieren. In der Programmierung versteht man darunter die Fähigkeit eines Programms, folgende Funktionen zu bieten:

  • Codeablaufverfolgung – Erhalten informativer Meldungen über die Ausführung einer Anwendung zur Laufzeit.

  • Debuggen – Ermitteln und Beheben von Programmierfehlern in einer Anwendung während der Entwicklungsphase. Weitere Informationen finden Sie unter Debuggen.

  • Leistungsindikatoren – Komponenten zur Ermittlung der Anwendungsleistung. Weitere Informationen finden Sie unter Leistungsindikatoren in .NET Framework.

  • Ereignisprotokolle – Komponenten, mit denen wichtige Ereignisse während der Anwendungsausführung erhalten und nachverfolgt werden können. Weitere Informationen finden Sie in den Ausführungen zur EventLog-Klasse.

Die Trace-Klasse und die Debug-Klasse ermöglichen während der Entwicklung und nach der Bereitstellung die Überwachung und Überprüfung der Anwendungsleistung. Beispielsweise können Sie die Trace-Klasse verwenden, um bestimmte Typen von Aktionen in einer bereitgestellten Anwendung nachzuverfolgen, während diese (beispielsweise, Erstellung neuer Datenbankverbindungen) auftreten, und können daher die Effizienz der Anwendung überwachen.

Ablaufverfolgung und Debuggen von Code

Während der Entwicklung können Sie mit den Ausgabemethoden der Debug-Klasse verwenden, um Meldungen im Ausgabefenster der integrierten Entwicklungsumgebung (IDE) von Visual Studio anzuzeigen. Beispiel:

Trace.WriteLine("Hello World!")
Debug.WriteLine("Hello World!")
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.Debug.WriteLine("Hello World!");

Jedes dieser Beispiele gibt "Hello World!" im Ausgabefenster aus, wenn die Anwendung im Debugger ausgeführt wird.

So können Sie Anwendungen anhand ihres Verhaltens in der Testumgebung debuggen und ihre Leistung optimieren. Sie können die Anwendung im Debugbuild das bedingte Attribut Debug debuggen, das aktiviert ist, erhalten Sie die gesamte Debugausgabe. Wenn die Anwendung zum Release bereit ist, kompilieren Sie das Releasebuild, ohne das bedingte Attribut Debug zu aktivieren, damit der Compiler nicht den Debugcode in die endgültige ausführbare Version aufnimmt. Weitere Informationen finden Sie unter Gewusst wie: Bedingtes Kompilieren mit Ablaufverfolgung und Debuggen. Weitere Informationen über andere Buildkonfigurationen für die Anwendung finden Sie unter Anwendungen in Visual Studio erstellen.

können Sie die Codeausführung auch in einer installierten Anwendung, mit den Methoden der Trace-Klasse. Wenn Sie Ablaufverfolgungsschalter in Code platzieren, können Sie steuern, ob und in welchem Umfang eine Ablaufverfolgung stattfindet. Dadurch überwachen Sie den Status der Anwendung in der Produktionsumgebung. Dies ist vor allem bei Businessanwendungen wichtig, die aus mehreren Komponenten bestehen, die ihrerseits auf mehreren Computern ausgeführt werden. In der Konfigurationsdatei steuern Sie die Verwendung der Schalter nach der Bereitstellung. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren von Ablaufverfolgungsschaltern.

Beim Entwickeln einer Anwendung, in der Ablaufverfolgung möglich sein soll, werden in der Regel Verfolgungs- und Debugmeldungen in den Anwendungscode eingetragen. Wenn die Anwendung bereit zur Bereitstellung ist, kompilieren Sie das Releasebuild, ohne das bedingte Debug-Attribut zu aktivieren. Sie können jedoch das bedingte Trace-Attribut aktivieren, damit der Compiler den Ablaufverfolgungscode in die ausführbare Datei einträgt. Weitere Informationen finden Sie unter Gewusst wie: Bedingtes Kompilieren mit Ablaufverfolgung und Debuggen.

x5952w0c.collapse_all(de-de,VS.110).gifPhasen der Codeablaufverfolgung

Die Codeablaufverfolgung umfasst die folgenden drei Phasen:

  1. Instrumentation – Verfolgungscode wird der Anwendung hinzugefügt.

  2. Ablaufverfolgung – der Verfolgungscode schreibt Informationen in das angegebene Ziel.

  3. Analyse – die Ablaufverfolgungsinformationen werden ausgewertet, um Probleme in der Anwendung zu ermitteln und zu verstehen.

Während der Entwicklung schreiben alle Debug- und Ablaufverfolgungsausgabemethoden standardmäßig Informationen in das Ausgabefenster in Visual Studio. In einer bereitgestellten Anwendung schreiben die Methoden die Ablaufverfolgungsinformationen in die angegebenen Ziele. Weitere Informationen zum Festlegen eines Ausgabeziels für die Ablaufverfolgung oder das Debuggen finden Sie unter Ablaufverfolgungslistener.

Instrumentation der Ablaufverfolgung und verteilte Anwendungen

In der Regel ist es schwierig, verteilte Anwendungen in der Art zu testen, in der sie letzten Endes verwendet werden. Wenige Entwicklungsteams haben die Möglichkeit, alle Kombinationen aus Betriebsystemen oder Webbrowsern (einschließlich aller lokalisierten Sprachoptionen) zu testen oder die hohe Zahl von Benutzern zu simulieren, die gleichzeitig auf die Anwendung zugreifen. Unter diesen Umständen können Sie die Reaktion einer verteilten Anwendung auf hohes Datenaufkommen, verschiedene Setups und individuelles Endbenutzerverhalten nicht testen. Außerdem haben viele Teile einer verteilten Anwendung keine Benutzeroberfläche, über die Sie direkt mit diesen Teilen interagieren oder ihre Aktivitäten anzeigen lassen könnten.

Dieser Umstand lässt sich ausgleichen, indem verteilte Anwendungen mit Funktionalität versehen werden, um bestimmte wichtige Ereignisse, insbesondere auftretende Fehler, für die Systemadministratoren zu beschreiben. Bei dieser so genannten Instrumentation werden Ablaufverfolgungsanweisungen an strategischen Stellen im Code platziert. Dadurch können Sie, wenn zur Laufzeit unerwartete Vorkommnisse auftreten (z. B. extrem langsame Reaktionszeit), die wahrscheinliche Ursache ermitteln.

Ablaufverfolgungsanweisungen entheben Sie von der schwierigen Aufgabe, den ursprünglichen Quellcode überprüfen, bearbeiten, neu kompilieren und den Laufzeitfehler in der Debugumgebung reproduzieren zu müssen. Beachten Sie, dass sich eine Anwendung nicht nur für die Anzeige von Fehlern, sondern auch für die Leistungsüberwachung instrumentieren lässt.

Strategische Platzierung von Trace-Anweisungen

Trace-Anweisungen, die zur Laufzeit eingesetzt werden sollen, müssen mit äußerster Sorgfalt platziert werden. Überlegen Sie, welche Ablaufverfolgungsdaten in einer bereitgestellten Anwendung wahrscheinlich benötigt werden, damit alle Möglichkeiten der Ablaufverfolgung entsprechend abgedeckt werden. Allerdings gibt es keine allgemeingültigen Richtlinien für die strategische Platzierung der Ablaufverfolgung, da die Anwendungen, in denen sie eingesetzt wird, sehr vielfältig sind. Weitere Informationen zur Platzierung von Ablaufverfolgungsanweisungen finden Sie unter Gewusst wie: Hinzufügen von Ablaufverfolgungsanweisungen zu Anwendungscode.

Ausgabe der Ablaufverfolgung

Die Ausgabe einer Ablaufverfolgung wird von als Listeners bezeichneten Objekten aufgenommen. Bei einem Listener handelt es sich um ein Objekt, das die Ablaufverfolgungsausgabe empfängt und in ein Ausgabemedium schreibt (in der Regel ein Fenster, ein Protokoll oder eine Textdatei). Wenn ein Ablaufverfolgungslistener erstellt wird, wird sie in der Regel zur Trace.Listeners-Auflistung hinzugefügt, damit er die gesamte Ablaufverfolgungsausgabe empfängt.

Ablaufverfolgungsdaten werden immer wenigstens an den standardmäßigen Trace Ausgabeziel, DefaultTraceListener geschrieben. Wenn aus irgendeinem Grund Sie DefaultTraceListener gelöscht haben, ohne ggf. weitere Listener zur Listeners-Auflistung hinzuzufügen, werden keine Ablaufverfolgungsmeldungen empfangen. Weitere Informationen finden Sie unter Ablaufverfolgungslistener.

Die sechs Debug-Member und Trace-Methoden, die Ablaufverfolgungsinformationen schreiben, werden in der folgenden Tabelle aufgeführt.

Methode

Ausgabe

Assert

Der angegebene Text oder, falls keiner angegeben ist, die Aufrufliste. Die Ausgabe wird nur geschrieben, wenn die als Argument in der Assert-Anweisung angegebene Bedingung False ist.

Fail

Der angegebene Text oder, falls keiner angegeben ist, die Aufrufliste.

Write

Der angegebene Text.

WriteIf

Der angegebene Text, wenn die als Argument in der WriteIf-Anweisung angegebene Bedingung erfüllt ist.

WriteLine

Der angegebene Text und ein Wagenrücklaufzeichen.

WriteLineIf

Der angegebene Text und ein Wagenrücklaufzeichen, wenn die als Argument in der WriteLineIf-Anweisung angegebene Bedingung erfüllt ist.

Alle Listener in der Listeners-Auflistung empfangen die Meldungen, die in der obigen Tabelle beschrieben werden, jedoch die Aktion variieren je nachdem, welche Art von Listener die Meldung empfängt. Beispielsweise DefaultTraceListener zeigt ein Assertionsdialogfeld an, wenn er die Fehler oder eine fehlgeschlagene Assert - Benachrichtigung erhält, wohingegen TextWriterTraceListener lediglich die Ausgabe in seinen Stream schreibt.

Durch Implementieren eines eigenen Listeners können Sie benutzerdefinierte Ergebnisse erzielen. Ein benutzerdefinierter Ablaufverfolgungslistener könnte die Meldungen z. B. in einem Meldungsfeld anzeigen oder die Verbindung zu einer Datenbank herstellen, in der die Meldungen zu einer Tabelle hinzugefügt werden. Alle benutzerdefinierten Listener müssen die oben genannten sechs Methoden unterstützen. Weitere Informationen zum Erstellen entwicklerdefinierter Listener finden Sie unter TraceListener in der Referenz zu .NET Framework.

Visual Basic-HinweisVisual Basic-Hinweis:

In Visual Basic 2005 wurde die in früheren Versionen von Visual Basic verfügbare Debug.Print-Methode durch die Methoden Debug.Write, Debug.WriteIf, Debug.WriteLine und Debug.WriteLineIf ersetzt.

Die Methoden Write und WriteLine schreiben immer den Text, den Sie angeben. Assert, WriteIf und WriteLineIf erfordern ein boolesches Argument, das steuert, ob der angegebene Text geschrieben; Sie erstellen den angegebenen Text nur wenn der Ausdruck true (bei WriteIf und WriteLineIf) ist, oder false (bei Assert). Die Fail-Methode schreibt immer den angegebenen Text. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen von Ablaufverfolgungsanweisungen zu Anwendungscode und in der Referenz zu .NET Framework.

Sicherheitsaspekte

Wenn Sie vor der Bereitstellung einer ASP.NET.Anwendung nicht die Ablaufverfolgung und das Debuggen deaktivieren, könnte die Anwendung Informationen über sich selbst offen legen, die von böswilligen Programmen missbraucht werden könnten. Weitere Informationen finden Sie unter Gewusst wie: Bedingtes Kompilieren mit Ablaufverfolgung und Debuggen, Anwendungen in Visual Studio erstellen und Gewusst wie: Konfigurieren von Ablaufverfolgungsschaltern. Das Debuggen kann auch mit Internetinformationendienste (IIS) konfiguriert werden.

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen von Ablaufverfolgungsanweisungen zu Anwendungscode

Gewusst wie: Konfigurieren von Ablaufverfolgungsschaltern

Konzepte

Ablaufverfolgungsschalter

Ablaufverfolgungslistener

Weitere Ressourcen

Ablaufverfolgung und Instrumentieren von Anwendungen