2010-02-05 9 views
7

En .NET, las firmas de métodos no me dicen si he omitido el manejo de algunas excepciones que podría arrojar mi código. ¿Hay alguna herramienta que pueda advertirme, por ejemplo, si estoy utilizando una eliminación de HashTable pero no he manejado la excepción ArgumentNullException? No quiero sorprenderme por el tiempo de ejecución.¿Cómo podría saber si no he manejado algunas excepciones no verificadas que mi código .NET podría arrojar?

¿Y esto significa que necesita conocer su código muy bien, de lo contrario, las excepciones no verificadas pueden ser más difíciles de trabajar?

Respuesta

4

En realidad, manejar las excepciones inesperadas terminando el programa es la mejor manera de lidiar con esta situación, ya que, en general, el estado del programa no está definido cuando sucede algo inesperado. Si registra todas las excepciones y tiene un buen conjunto de pruebas de aceptación, puede eliminar los problemas que provienen de excepciones inesperadas debido al flujo del programa.

La programación defensiva mediante el control de las entradas del método, las pruebas unitarias de las clases y la comprensión de su marco harán que se espere la mayoría de las excepciones.

1

No hay soporte de idiomas para lo que está intentando lograr. Escribimos un complemento de aduana a VS para asegurarnos de que todos los puntos de entrada para nuestra API tenían capturas de prueba para el registro. Sin embargo, nunca vi el valor en los idiomas que lo forzó a cubrir todos los posibles casos de excepciones declaradas ya que todavía tiene que escribir un código para hacer algo significativo con el error. La mayoría de la gente simplemente mira de qué se queja el compilador al escribir un controlador y esconder lo que podría ser un error útil en algún código inútil. En algunos casos, es mejor fracasar y saber que hay un problema.

+0

Estoy de acuerdo que es una mala cosa que acaba de capturar las excepciones y no utilizarla adecuadamente para tomar una decisión de cómo se programa debe reaccionar ante es malo. Es como en VB6 simplemente decir 'On Resume Error Next'. – awe

1

Debe agregar el controlador de excepción de nivel superior para su aplicación y unidad de escritura, prueba funcional y de integración para su aplicación, que probará todos los casos de uso posibles. Esto te ayudará a eliminar casi todas las excepciones sin marcar.

También intente no detectar excepciones, pero elimine la razón. (Es decir, no coger ArgumentNullException pero no pasa null

2

para Windows aplicaciones:

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: No estoy seguro de entender esto .. Por lo tanto, todas las excepciones no controladas y relacionadas con hilos vendrán aquí en caso de que no las haya manejado, y proporciona cierta seguridad ... ¿es su intención aquí? –

+0

Sí ... Entonces puede decidir qué hacer con estas excepciones. –

Cuestiones relacionadas