2010-02-05 11 views
7

In .NET, Methodensignaturen sagen mir nicht, wenn ich einige Ausnahmen verpasst habe, die von meinem Code ausgelöst werden könnten. Gibt es ein Tool, das mich warnen kann, wenn ich sage, dass ich eine HashTable-Entfernung verwende, aber die ArgumentNullException nicht behandelt habe? Ich möchte nicht zur Laufzeit überrascht sein.Woher weiß ich, ob ich einige ungeprüfte Ausnahmen behandelt habe, die mein .NET-Code auslösen könnte?

Und bedeutet das, dass Sie Ihren Code sehr gut kennen müssen, sonst ist es schwieriger mit unkontrollierten Ausnahmen zu arbeiten?

Antwort

4

Tatsächlich ist die Behandlung unerwarteter Ausnahmen durch Beenden des Programms der beste Weg, um mit dieser Situation umzugehen, da im Allgemeinen der Programmstatus nicht definiert ist, wenn etwas Unerwartetes passiert. Wenn Sie alle Ausnahmen protokollieren und über annehmbare Akzeptanztests verfügen, können Sie Probleme aufgrund unerwarteter Ausnahmen aufgrund des Programmablaufs beheben.

Die defensive Programmierung durch Überprüfung der Methodeneingaben, Komponententests von Klassen und das Verständnis Ihres Frameworks wird die meisten Ausnahmen erwarten lassen.

1

Es gibt keine Sprachunterstützung für das, was Sie erreichen möchten. Wir haben ein Zoll-Add-In für VS geschrieben, um sicherzustellen, dass alle Einstiegspunkte für unsere API Fänge zum Protokollieren haben. Allerdings habe ich nie den Wert in Sprachen gesehen, der Sie gezwungen hat, alle möglichen deklarierten Ausnahmefälle abzudecken, da Sie noch etwas Code schreiben müssen, um etwas Sinnvolles mit dem Fehler zu tun. Die meisten Leute schauen sich nur an, was der Compiler darüber beschwert, einen Handler zu schreiben und zu verbergen, was ein nützlicher Fehler in irgendeinem nutzlosen Code sein könnte. In einigen Fällen ist es besser zu versagen und zu wissen, dass ein Problem vorliegt.

+0

Ich bin damit einverstanden, es ist eine schlechte Sache, nur Ausnahmen zu fangen und es nicht richtig verwenden, um eine Entscheidung zu treffen, wie Sie das Programm reagieren sollten Es ist wie in VB6, nur 'On Error Resume Next' zu sagen. – awe

1

Sie sollten die oberste Ausnahmeroutine für Ihre Anwendung hinzufügen und Einheiten-, Funktions- und Integrationstest für Ihre App schreiben, um alle möglichen Anwendungsfälle zu testen. Dies wird Ihnen helfen, fast alle unkontrollierten Ausnahmen zu beseitigen.

Versuchen Sie auch, keine Ausnahmen zu erfassen, aber den Grund zu beseitigen. (Dh fängt nicht ArgumentNullException aber nicht vorbei null

2

Für Windows-Anwendungen:

AppDomain currentDomain = default(AppDomain); 
currentDomain = AppDomain.CurrentDomain; 
// Handler for unhandled exceptions. 
currentDomain.UnhandledException += UnhandledExceptionHandler; 
// Handler for exceptions in threads behind forms. 
Application.ThreadException += ThreadExceptionHandler; 

public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) 
{ 
} 

public static void ThreadExceptionHandler(object sender, Threading.ThreadExceptionEventArgs e) 
{ 
} 
+0

@Asseem: Nicht sicher, dass ich das verstehe .. Also, alle unbehandelten und threadbezogenen Ausnahmen kommen hierher, falls ich sie nicht behandelt habe, und es bietet etwas Sicherheit .. ist das Ihre Absicht hier? –

+0

Ja ... Sie können dann entscheiden, was mit diesen Ausnahmen zu tun ist. –

Verwandte Themen