Vor kurzem musste ich ein zusätzliches Modul für einen bestehenden Dienst entwickeln, der von einem Kollegen entwickelt wurde. Er hatte einen Try/Catch-Block in die Hauptarbeitsfunktion eingefügt, um alle unbehandelten Ausnahmen abzufangen, die bis zu dieser Ebene auftraten, und sie zusammen mit Stack-Trace-Informationen usw. zu protokollieren:
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
Das macht das Programm zwar sehr stabil (im Sinne von "unwahrscheinlich, dass es abstürzt"), aber ich hasse es, weil ich beim Testen meines Codes die dadurch verursachten Ausnahmen nicht sehe. Natürlich kann ich in das Ausnahmeprotokoll schauen und sehen, ob es neue Einträge gibt, aber ich bevorzuge das direkte Feedback, wenn ich die Ausnahme in dem Moment bekomme, in dem sie ausgelöst wird (mit dem Cursor auf der richtigen Zeile im Code, bitte).
Ich habe diese oberste Ebene try/catch entfernt, zumindest solange ich noch kodiert und getestet habe. Aber jetzt ist meine Aufgabe beendet und ich muss entscheiden, ob ich es für die Veröffentlichung wieder einfüge oder nicht. Ich denke, dass ich es tun sollte, weil es den Dienst stabiler macht, und der ganze Sinn des Dienstes ist, dass er im Hintergrund läuft, ohne dass man ihn überwachen muss. Andererseits habe ich gelesen, dass man nur bestimmte Ausnahmen aufrufen sollte (wie in IoException
), nicht allgemein Exception
.
Was raten Sie zu diesem Thema?
Übrigens ist das Projekt in C# geschrieben, aber ich bin auch an Antworten für andere Sprachen als .NET interessiert.