Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Tracing and Instrumenting Applications

 

Mithilfe der Ablaufverfolgung kann die Ausführung einer Anwendung überwacht werden. Beim Entwickeln können Sie eine .NET Framework-Anwendung mit einer Ablaufverfolgungs- und Debugginginstrumentation versehen, die sowohl beim Entwickeln als auch nach der Bereitstellung der Anwendung eingesetzt werden kann. Mit den Klassen System.Diagnostics.Trace, System.Diagnostics.Debug und System.Diagnostics.TraceSource können Sie Informationen zu Fehlern und zur Anwendungsausführung in Protokollen, Textdateien oder auf anderen Medien für eine spätere Analyse aufzeichnen.

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 Performance Counters in the .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.

Das Instrumentieren einer Anwendung durch Platzieren von Ablaufverfolgungsanweisungen an strategischen Codestellen ist vor allem bei verteilten Anwendungen nützlich. Mithilfe von Ablaufverfolgungsanweisungen können Sie eine Anwendung so instrumentieren, dass nicht nur Informationen zu Fehlern angezeigt werden, sondern auch die Leistung der Anwendung überwacht wird.

Die TraceSource-Klasse stellt erweiterte Funktionen zur Ablaufverfolgung bereit und kann anstelle der statischen Methoden der älteren Ablaufverfolgungsklassen Trace und Debug verwendet werden. Die vertrauten Klassen Trace und Debug werden weiterhin häufig verwendet, aber die TraceSource-Klasse wird für neue Ablaufverfolgungsbefehle, z. B. TraceEvent und TraceData, empfohlen.

Die Trace-Klasse und die Debug-Klasse unterscheiden sich nur in einem Punkt: Die Prozeduren und Funktionen der Trace-Klasse werden standardmäßig in Releasebuilds kompiliert, die der Debug-Klasse nicht.

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

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

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 mit aktiviertem bedingtem Debug-Attribut debuggen, sodass Sie die gesamte Debugausgabe erhalten. Wenn die Anwendung zur Freigabe bereit ist, können Sie den Releasebuild kompilieren, ohne das bedingte Debug-Attribut zu aktivieren, damit der Compiler nicht den Debugcode in die endgültige ausführbare Version aufnimmt. Weitere Informationen finden Sie unter How to: Compile Conditionally with Trace and Debug. Weitere Informationen zu verschiedenen Buildkonfigurationen für die Anwendung finden Sie unter Anwendungen in Visual Studio erstellen.

Mit den Methoden der Trace-Klasse können Sie die Codeausführung auch in einer installierten Anwendung verfolgen. Wenn Sie Trace Switches im Code platzieren, können Sie steuern, ob und in welchem Umfang eine Ablaufverfolgung stattfindet. Dadurch können Sie den Status der Anwendung in einer Produktionsumgebung überwachen. Dies ist vor allem bei Businessanwendungen wichtig, die aus mehreren Komponenten bestehen, die ihrerseits auf mehreren Computern ausgeführt werden. Über die Konfigurationsdatei steuern Sie die Verwendung der Schalter nach der Bereitstellung. Weitere Informationen finden Sie unter How to: Create, Initialize and Configure Trace Switches.

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 die Bereitstellungsphase erreicht hat, können Sie den Releasebuild kompilieren, 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 How to: Compile Conditionally with Trace and Debug.

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 von Ihnen angegebenen Ziele. Weitere Informationen zum Festlegen eines Ausgabeziels für die Ablaufverfolgung oder das Debuggen finden Sie unter Trace Listeners.

Im Folgenden finden Sie einen allgemeinen Überblick über die wichtigsten Schritte, die normalerweise bei der Analyse und Behebung potenzieller Probleme in bereitgestellten Anwendungen mithilfe der Ablaufverfolgung durchzuführen sind. Weitere Informationen zur Durchführung dieser Schritte finden Sie unter dem entsprechenden Link.

So verwenden Sie die Ablaufverfolgung in einer Anwendung

  1. Überlegen Sie, welche Ablaufverfolgungsausgabe nach der Bereitstellung der Anwendung an ihrem Einsatzort benötigt wird.

  2. Erstellen Sie eine Reihe von Schaltern. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren von Ablaufverfolgungsschaltern.

  3. Fügen Sie die Ablaufverfolgungsanweisungen zum Anwendungscode hinzu.

  4. Bestimmen Sie, wo die Ablaufverfolgungsausgabe angezeigt werden soll, und fügen Sie die entsprechenden Listener hinzu. Weitere Informationen finden Sie unter Erstellen und Initialisieren von Ablaufverfolgungslistenern.

  5. Testen und debuggen Sie die Anwendung und den darin enthaltenen Ablaufverfolgungscode.

  6. Kompilieren Sie die Anwendung mit einem der folgenden Verfahren in ausführbaren Code:

    • Verwenden Sie das Menü Erstellen zusammen mit der Seite Debuggen im Dialogfeld Eigenschaftenseiten imProjektmappen-Explorer. Dies gilt für die Kompilierung in Visual Studio.

      - oder -

    • Verwenden Sie für die Kompilierung von der Befehlszeile aus die Compilerdirektiven Trace und Debug. Weitere Informationen finden Sie unter Bedingtes Kompilieren mit Ablaufverfolgung und Debuggen. Dies gilt für die Kompilierung von der Befehlszeile aus.

  7. Aktivieren Sie den entsprechenden Ablaufverfolgungsschalter, wenn zur Laufzeit ein Problem auftritt. Weitere Informationen finden Sie unter Konfigurieren von Ablaufverfolgungsschaltern.

    Der Ablaufverfolgungscode schreibt Ablaufverfolgungsmeldungen in ein angegebenes Ziel, z. B. einen Bildschirm, eine Textdatei oder ein Ereignisprotokoll. Das Ziel wird durch den Typ des in die Trace.Listeners-Auflistung eingetragenen Listeners bestimmt.

  8. Analysieren Sie die Ablaufverfolgungsmeldungen, um das Problem in der Anwendung zu ermitteln und zu verstehen.

Beim Erstellen einer verteilten Anwendung ist es in der Regel schwierig, die Anwendung in der Weise zu testen, in der sie letzten Endes verwendet wird. Wenige Entwicklungsteams haben die Möglichkeit, alle möglichen 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 sogenannten 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.

Mit Ablaufverfolgungsanweisungen können Sie die schwierige Aufgabe vermeiden, 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.

Ablaufverfolgungsanweisungen, die zur Laufzeit eingesetzt werden sollen, müssen mit äußerster Sorgfalt platziert werden. Überlegen Sie, welche Ablaufverfolgungsinformationen 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 How to: Add Trace Statements to Application Code.

Die Ausgabe einer Ablaufverfolgung wird von als Listener 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 in der Regel zur Trace.Listeners-Auflistung hinzugefügt, damit er die gesamte Ablaufverfolgungsausgabe empfängt.

Ablaufverfolgungsinformationen werden immer wenigstens an das standardmäßige Trace-Ausgabeziel, den DefaultTraceListener, geschrieben. Wenn Sie den DefaultTraceListener aus irgendeinem Grund gelöscht haben, ohne andere Listener zur Listeners-Auflistung hinzuzufügen, erhalten Sie keine Ablaufverfolgungsmeldungen. Weitere Informationen finden Sie unter Trace Listeners.

Die sechs Debug-Member und Trace-Methoden, die Ablaufverfolgungsinformationen schreiben, sind 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 empfangen die Meldungen, die in der obigen Tabelle beschrieben sind, doch können die ausgeführten Aktionen variieren, je nachdem, welche Art von Listener die Meldung empfängt. Beispielsweise zeigt DefaultTraceListener ein Dialogfeld zur Assertion an, wenn er eine Benachrichtigung über einenFehler oder fehlgeschlagenen Assertempfängt, 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 sollten die sechs oben genannten Methoden unterstützen. Weitere Informationen zum Erstellen entwicklerdefinierter Listener finden Sie unter TraceListener in der Referenz zu .NET Framework.

System_CAPS_note Visual 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 von Ihnen angegebenen Text. Assert, WriteIf und WriteLineIf erfordern ein boolesches Argument, das steuert, ob der angegebene Text geschrieben wird. Der angegebene Text wird nur geschrieben, wenn der Ausdruck true (bei WriteIf und WriteLineIf) oder false (bei Assert) lautet. Die Fail-Methode schreibt immer den angegebenen Text. Weitere Informationen finden Sie unter How to: Add Trace Statements to Application Code und in der Referenz zu .NET Framework.

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 How to: Compile Conditionally with Trace and Debug, Anwendungen in Visual Studio erstellen und How to: Create, Initialize and Configure Trace Switches. Das Debuggen kann auch über Internetinformationendienste (IIS) konfiguriert werden.

Anzeigen: