www.rolandk.de
- Aktuelle Themen zu .Net -
Achtung: Hier handelt es sich um meine alte Seite.
Die aktuelle ist unter folgendem Link erreichbar: www.rolandk.de/wp/
Home Blog Benachrichtigung über alle Exceptions einer Anwendung erhalten




















































Benachrichtigung über alle Exceptions einer Anwendung erhalten
Dienstag, den 15. Februar 2011 um 21:11 Uhr

Ein Problem, dass man wohl mit .Net Anwendungen öfters hat: Während das Programm läuft, treten einige Exceptions auf, von denen der Entwickler, der Tester oder der Benutzer nichts mitbekommt, weil diese durch catch-Blöcke abgefangen werden. Im schlechtesten Fall sind das catch-Blöcke, die im Grunde gar nichts mit der Exception machen. Bei einer solchen Konstellation einen Fehler zu finden, erweist sich als sehr schwierig. Auf der anderen Seite ist es auch nicht einfacher, im Nachhinein alle Stellen zu finden, die richtig behandelt werden müssen - zumal man als Entwickler zum Beispiel auf Fremdbibliotheken nur selten Einfluss hat. Abhilfe schafft das neue Framework 4.0.

Ohne großartig auf Details einzugehen zunächst einmal folgendes Coding:

  1. /// <summary>
  2. /// Main method of the application.
  3. /// </summary>
  4. public static void Main(string[] args)
  5. {
  6. AppDomain.CurrentDomain.FirstChanceException +=
  7. new EventHandler<FirstChanceExceptionEventArgs>(OnAppDomainFirstChangeException);
  8.  
  9. try
  10. {
  11. Console.WriteLine("Raising exception..");
  12. int zeroValue = 0;
  13. int test = 5 / zeroValue;
  14. }
  15. catch (Exception ex)
  16. {
  17. Console.WriteLine("Devide by zero exception catched!");
  18. }
  19. }
  20.  
  21. /// <summary>
  22. /// Called from framework if any exception occurs.
  23. /// </summary>
  24. private static void OnAppDomainFirstChangeException(object sender, FirstChanceExceptionEventArgs e)
  25. {
  26. Console.WriteLine("FirstChangeException event raised..");
  27. }

Hier passiert im Grunde nichts schwieriges: Zunächst wird an der aktuellen AppDomain das Ereignis FirstChangeException registriert und danach wird innerhalb des try-Blocks eine Exception ausgelöst (Teilung durch 0). Doch anders, als man vielleicht vermutet, wird nach Auftreten der Exception nicht direkt der catch-Block ausgeführt, sondern zuerst der Ereignisbehandler des FirstChangeException Ereignisses. Nachfolgende Ausgabe des Programmes macht das deutlich:

 

 

Warum ist das so? Das FirstChangeException Ereignis soll genau das Problem lösen, welches ich oben beschrieben habe. Und zwar wird dieses Ereignis für alle Ausnahmen einer AppDomain aufgerufen, bevor der jeweilige catch-Block durchlaufen wird. Dieses Ereignis gibt dem Entwickler also die Möglichkeit, einen generellen Algorythmus für alle Exceptions zu hinterlegen. Selbst, wenn die Exception in einer externen Bibliothek auftreten. So bietet es sich etwa an, an dieser Stelle einige Informationen über die Exception zu protokollieren.

 

Kommentar hinzufügen

Ihr Name:
Kommentar: