Freigeben über


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 hierzu finden Sie unter Einführung in die Überwachung von Leistungsschwellenwerten.

  • 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 Klassen Trace und Debug ermöglichen die Überwachung und Überprüfung der Anwendungsleistung während der Entwicklung und nach der Bereitstellung. Mit der Trace-Klasse können Sie z. B. Aktionen eines bestimmten Typs wie die Erstellung neuer Datenbankverbindungen in einer bereitgestellten Anwendung direkt bei ihrem Auftreten nachverfolgen und dadurch die Effizienz der Anwendung überwachen.

Ablaufverfolgung und Debuggen von Code

Während der Entwicklung können Sie mit den Ausgabemethoden der Debug-Klasse Meldungen im Ausgabefenster der IDE (Integrated Development Environment) von Visual Studio anzeigen. Beispiel:

Trace.WriteLine("Hello World!")
Debug.WriteLine("Hello World!")
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.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. Wenn Sie beim Debuggen der Anwendung im Debugbuild das bedingte Debug-Attribut aktivieren, erhalten Sie die gesamte Debugausgabe. Wenn die Anwendung zum Release bereit ist, deaktivieren Sie das bedingte Debug-Attribut beim Kompilieren des Releasebuilds, 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 Der Buildprozess in Visual Studio.

Mit Methoden der Trace-Klasse können Sie die Codeausführung auch in einer installierten Anwendung verfolgen. 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.

Phasen 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 er der Trace.Listeners-Auflistung hinzugefügt, damit er die gesamte Ablaufverfolgungsausgabe empfängt.

Ablaufverfolgungsdaten werden immer wenigstens in das Trace-Standardausgabeziel geschrieben, den DefaultTraceListener. Wenn der DefaultTraceListener gelöscht wird, ohne dass der Listeners-Auflistung andere Listener hinzugefügt wurden, werden keine Ablaufverfolgungsmeldungen empfangen. Weitere Informationen finden Sie unter Ablaufverfolgungslistener.

Die sechs Debug-Member und Trace-Methoden zum Schreiben von Ablaufverfolgungsinformationen werden in der folgenden Tabelle aufgeführt.

Methode

Output

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 erhalten die in obiger Tabelle beschriebenen Meldungen. Die daraus resultierenden Aktionen sind jedoch unterschiedlich, denn sie richten sich nach dem Typ des jeweiligen Listeners. Der DefaultTraceListener zeigt z. B. ein Assertionsdialogfeld an, wenn er die Fail-Benachrichtigung oder eine fehlgeschlagene Assert-Benachrichtigung erhält, wohingegen der 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 Boolean-Argument, das steuert, ob der angegebene Text geschrieben wird oder nicht. Er wird nur dann geschrieben, wenn der Ausdruck true (bei WriteIf und WriteLineIf) oder false ergibt (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, Der Buildprozess in Visual Studio 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