Recientemente tuve que desarrollar un módulo adicional para un servicio existente desarrollado por un colega. Se había colocado un bloque try/catch en la función principal de trabajo para la captura de todas las excepciones unhadled que burbujeaban a este nivel, el registro de ellos, junto con información sobre seguimiento de la pila, etc:¿Cómo implementar el manejo de excepciones de nivel superior?
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
bien esto hace que el programa sea muy estable (como se en 'improbable que se cuelgue'), lo odio porque cuando estoy probando mi código, no veo las excepciones causadas por él. Por supuesto, puedo mirar el registro de excepciones y ver si hay entradas nuevas, pero prefiero mucho la respuesta directa de obtener la excepción en el momento en que se lanza (con el cursor en la línea derecha del código, por favor).
Quité este try/catch de nivel superior al menos mientras todavía estaba codificando y probando. Pero ahora mi tarea está terminada y tengo que decidir si volver a ponerla para el lanzamiento, o no. Creo que debería hacerlo, porque hace que el servicio sea más estable, y el objetivo es que se ejecute en segundo plano sin necesidad de supervisión. Por otro lado, he leído que uno solo debe llamar a excepciones específicas (como en IoException
), no genéricamente Exception
.
¿Cuál es su consejo sobre este tema?
Por cierto, el proyecto está escrito en C#, pero también me interesan las respuestas para lenguajes que no sean .NET.
Vea también http://stackoverflow.com/questions/576532/is-dying-is-awesome-preferred – Brian