Throw o Throw Ex, esa es la cuestión

by

Estaba revisando un artículo de code project (que no os enlazo porque es algo viejo y no creo que algunas de las cosas sean válidas hoy en día), cuando en un punto de dicho artículo menciona la diferencia de usar throw ex y/o sólo throw. Esto me ha hecho recordar que hace unos días, mi compi Jose Antonio (un crack!), me contó algo al respecto y me he decidido a indagar algo más.

De lo que he leído, os paso 2 enlaces muy buenos sobre el tema y en los que me he basado para este resumen.

http://geekswithblogs.net/sdorman/archive/2007/08/20/Difference-between-quotthrowquot-and-quotthrow-exquot-in-.NET.aspx

http://aspadvice.com/blogs/joteke/archive/2004/04/15/2277.aspx

Básicamente, lo que viene a decir es, que al usar throw ex, se hace un limpiado del Stack Trace, lo que hace que al llegar la excepción a la capa de arriba, ésta sólo contenga información en el stack trace, de la última excepción producida, y no “acarree” posible información de excepciones que se haya podido producir en otros métodos anteriores. Esto, que es algo complejo de explicar por escrito, lo podéis ver muy fácilmente en el ejemplo del segundo artículo, donde hay varias excepciones anidadas y se ve claramente que con throw Ex se pierde información, de los errores acumulados.

Algo similar ocurre cuando capturamos una excepción, pero lanzamos una nueva excepción personalizada. Ejm (copiado del primer artículo):
code1

Para evitar eso, a la hora de lanzar la excepción personalizada, se aconseja pasar como parámetro la excepción capturada:

throw new ApplicationException("operation failed!", ex);

Así que, como regla general (que no fija), mejor lanzar la excepción con Throw para tener la máxima información del Stack Trace 🙂

Para acabar, por si alguien dudaba de la importancia de manejar adecuadamente los errores de nuestra aplicación, aquí os dejo un par de imágenes curiosas:

Pantallazo azul a lo grande!!
error_azul

system_error
(Esta última, por increíble que parezca, tb es una historia real, podéis verlo aquí … flipo!…)

Saludos!!

Anuncios

Etiquetas: ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: