2010-02-05 10 views
7

Dans .NET, les signatures de méthode ne me disent pas si j'ai manqué de gérer certaines exceptions qui pourraient être levées par mon code. Y a-t-il un outil qui peut m'avertir, si je dis que j'utilise une suppression de HashTable mais que je n'ai pas géré l'exception ArgumentNullException? Je ne veux pas être surpris au moment de l'exécution. Et cela signifie-t-il que vous devez connaître très bien votre code, sinon des exceptions non contrôlées peuvent être plus difficiles à gérer?Comment saurais-je si je n'ai pas traité certaines exceptions non vérifiées que mon code .NET pourrait déclencher?

Répondre

4

En fait, la gestion des exceptions inattendues en terminant le programme est la meilleure façon de gérer cette situation, car, en général, l'état du programme n'est pas défini en cas d'événement inattendu. Si vous consignez toutes les exceptions et que vous disposez d'un ensemble décent de tests d'acceptation, vous pouvez éliminer les problèmes qui proviennent d'exceptions inattendues en raison du flux du programme.

La programmation défensive en vérifiant les entrées de méthode, les tests unitaires de classes et la compréhension de votre framework feront que la plupart des exceptions sont attendues.

1

Il n'existe aucun support linguistique pour ce que vous tentez d'accomplir. Nous avons écrit un addin douanier à VS pour nous assurer que tous les points d'entrée de notre API avaient des tentatives d'enregistrement. Cependant, je n'ai jamais vu la valeur dans les langues qui vous ont forcé à couvrir tous les cas d'exception déclarés possibles, car vous devez toujours écrire du code pour faire quelque chose de significatif avec l'erreur. La plupart des gens regardent simplement ce que le complicateur se plaint d'écrire un gestionnaire et de cacher ce qui pourrait être une erreur utile dans un code inutile. Dans certains cas, il vaut mieux échouer et savoir qu'il y a un problème.

+0

Je suis d'accord qu'il est une mauvaise chose à prendre juste des exceptions et ne pas utiliser correctement pour prendre une décision pour savoir comment vous programme devrait réagir C'est comme dans VB6 de simplement dire "On Error Resume Next" – awe

1

Vous devez ajouter un gestionnaire d'exceptions de niveau supérieur pour votre application et écrire un test d'unité, fonctionnel et d'intégration pour votre application, qui testera tous les cas d'utilisation possibles. Cela vous aidera à éliminer presque toutes les exceptions non vérifiées.

Essayez également de ne pas intercepter les exceptions, mais éliminez la raison. (C.-à-pas attraper ArgumentNullException mais ne pas passer null

2

Pour des applications Windows:

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

@Aseem: Je ne suis pas sûr de comprendre cela .. Donc, toutes les exceptions non gérées et liées au thread viendront ici au cas où je ne les aurais pas traitées, et il fournit une certaine sécurité .. est-ce que votre intention ici? –

+0

Oui ... Vous pouvez alors décider quoi faire avec ces exceptions. –