Exception Handling, Tracing und Logging Proseminar Objektorientiertes Programmieren mit.net und C# Tomas Ladek Institut für Informatik Software & Systems Engineering
Agenda Exceptions Allgemeines Implementierung Eigene Exceptions Logging Allgemeines Implementierung Tracing Allgemeines Implementierung Quellenangabe 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 2
Exceptions Allgemeines Anwender sind unvorhersehbar. Eine gute Anwendung muss für alles vorbereitet sein. keine unverständliche Fehlermeldungen Exceptions sind keine Fehlersituationen! 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 3
Exceptions Allgemeines Exceptions können ausgelöst werden von bestimmten Routinen der Klassenbibliothek des.net frameworks, von der CLR, oder vom Programmierer selbst. Können an vorhergesehenen stellen behandelt oder erneut ausgelöst werden. 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 4
Exceptions Allgemeines Motivation: Programmcode sollte nicht zu stark mit der Fehlerbehandlung vermischt werden. Lesbarkeit und Struktur des Codes Fehlerbehandlung kann aufwändiger werden und es häufen sich doppelte Codeteile. 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 5
ohne Excep*ons mit Excep*ons 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 6
Exceptions Allgemeines Aber: Man sollte die Fehlerprüfung nicht ausschließlich durch Exceptions regeln. z.b. wenn fehlerhafte Angaben vom Benutzer zu erwarten sind oder nach Dingen gefragt wird, die es mit gewisser Wahrscheinlichkeit nicht gibt Exception-Behandlung ist zeitaufwändig 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 7
Exceptions Implementierung Exceptions sind Objekte vom Typ einer spezifischen Exception-Klasse. Alle spezielle Exception-Typen erben von der Basisklasse System.Excep,on Ein paar ausgewählte Exception-Typen: Viele vordefinierten Exceptions erweitern ihre Basisklasse garnicht. 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 8
Exceptions Implementierung Besondere Member der Excep,on-Klasse: Eigenschaft HelpLink InnerExcep,on Message Source StackTrace TargetSite Beschreibung Verweis auf Hilfedatei, die diese Ausnahme beschreibt Referenz auf die innere Ausnahme Beschreibung des aktuellen Fehlers Beschreibung der Anwendung oder des Objekts, die bzw. das den Fehler ausgelöst hat Aktuelle Aufrufreihenfolge aller Methoden Methode, in der die Ausnahme ausgelöst worden ist 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 9
Exceptions Implementierung try/catch 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 10
Exceptions Implementierung try/catch 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 11
Exceptions Implementierung try/catch/finally finally: Wird immer ausgeführt ob ein Fehler vorkam oder nicht. Gut für kontrolliertes Schließen oder Freigeben von Ressourcen. 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 12
Exceptions Implementierung catch erfolgreich: das Exception-Objekt wird nach der Behandlung beseitigt. catch nicht erfolgreich: Exception wird weitergereicht...... an den umschließenden try/catch Block, oder an die aufrufende Methode. Nichtbehandelte Exceptions werden von.net verarbeitet und das Programm wird unsanft mit der üblichen Fehlermeldung beendet. 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 13
Exceptions Eigene Exceptions Motivation: Allein durch Typ/Name der vordefinierten Exceptions muss der Entstehungskontext nicht klar sein. Menge an Informationen in vordefinierten Exceptions ist beschränkt. Neue Exception-Klassen sollten... von (Applica,on)Excep,on erben, auf Exception enden, und mindestens die drei folgenden Konstruktoren anbieten: Konstruktor MyExcep,on MyExcep,on(String) Beschreibung Ohne argumente Mit einer bestimmten error message MyExcep,on(String, Excep,on) Zusätzlich mit der Exception, die MyException ausgelöst hat 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 14
Exceptions Eigene Exceptions Klassendefinition 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 15
Exceptions Eigene Exceptions throw 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 16
Agenda Exceptions Allgemeines Implementierung Eigene Exceptions Logging Allgemeines Implementierung Tracing Allgemeines Implementierung Quellenangabe 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 17
Das Windows Ereignisprotokoll: Logging 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 18
Das Windows Ereignisprotokoll: Logging 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 19
Das Windows Ereignisprotokoll: Logging 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 20
Logging Allgemeines Das Windows Ereignisprotokoll: Vorteile: Er ist auf jedem Windowsrechner vorhanden. Er läuft als Systemdienst und ist immer bereit sich Ereignisse zu merken. Nachteile: Enthält meist sehr viele Einträge Wird technisch vom Anwender kontrolliert. Begrenzter Speicherplatz. 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 21
Logging Implementierung In das Ereignisprotokoll schreiben: 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 22
Logging Implementierung In das Ereignisprotokoll schreiben (einfacher): 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 23
Logging Implementierung Aus dem Ereignisprotokoll lesen: 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 24
Logging Implementierung Ein Ereignisprotokoll löschen: 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 25
Agenda Exceptions Allgemeines Implementierung Eigene Exceptions Logging Allgemeines Implementierung Tracing Allgemeines Implementierung Quellenangabe 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 26
Tracing Allgemeines Motivation: Möglichkeit den eigentlichen Ablauf einer Anwendung zu verfolgen. Die eventuelle Vielzahl der Meldungen kann (sollte) nicht in das Ereignisprotokoll geschrieben werden. Verfügbare Mittel: Ausgaben über die Klasse System.Diagnos,cs.Debug Verwenden der Klasse System.Diagnos,cs.Trace Wählt man die Konfiguration Release aus, werden die Aufrufe auf Debug im Allgemeinen nicht kompiliert, die auf Trace hingegen immer! 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 27
Tracing Implementierung Die Klasse Trace: Verfügt im Feld Listeners über eine TraceListenerCollec,on Ausgaben werden über diese Listener entsprechend weitergeleitet an das Outputfenster über DefaultTraceListener, an die Konsole über ConsoleTraceListener, in das Windows Ereignisprotokoll über EventLogTraceListener, oder allgemein in einen Stream über TextWriterTraceListener 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 28
Tracing Implementierung 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 29
Tracing Implementierung 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 30
Tracing Implementierung TraceSwitch muss nicht direkt im Code gesetzt werden. In der Konfigurationsdatei der Anwendung kann man ihn ebenfalls auf die Stufen Off, Error, Warning, Info oder Verbose mit 0, 1, 2, 3 bzw. 4 stellen 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 31
Quellen Rolf Wenger, Handbuch der.net Programmierung, Microsoft Press, 2007 Dirk Frischalowski, Visual C# 2010, Addison-Wesley, 2010 Adreas Kühnel, Visual C# 2010, Das umfassende Handbuch, Galileo Computing, 2010 24.11.11 Tomas Ladek - Exception Handling, Tracing und Logging 32
Fragen?