Exception en .NET

Posiblemente uno de los puntos mas fuertes de la tecnología .NET sea las capacidades de Reflexivas que le permiten recolectar información de un assembly mediante la lectura de metadatos internos. Una de las funcionalidades donde mejor se aprovecha esta capacidad es a la hora de debuggear, y capturar Excepciones.
Cuando, en proceso de debbugeo capturamos una excepción, y analizamos las propiedades que nos proporciona la clase Exception, para descubrir el objeto que produjo el error. Pero cuando exploramos el objeto Exception, encontramos innumerables mensajes y códigos de difícil comprensión. Por ello intentaremos en este post aclarar los campos con la información más relevante para analizar el error.

Analizando Exception encontramos los siguientes campos:

  • Message: Te muestra un mensaje explicativo donde se describe el como y donde se produjo el error. Es quizás la propiedad mas útil para conocer el error que se ha producido.
  • Source: Te muestra el nombre del assembly y el namespace en el que se inició la excepción. Esta propiedad es útil cuando trabajamos con varios asseblies referenciados en el proyecto, para conocer en cual de ellas se produjo el error.
  • InnerException: Si la excepción que se ha lanzado es causada por otra excepción en un nivel inferior, te proporciona un objeto System.Exception de esta excepción primaria, para su análisis.
  • StackTrace: StackTrace muestra los procedimientos estaban siendo ejecutados en el instante en el que la excepción fue lanzada. Esta propiedad te permite conocer el estado de la pila y ver así en que situación del sistema había otros procesos en ejecución.
  • HResult: Este numero(pasado a Hexadecimal) representa 3 campos con información acerca del error. Un campo te indica el si el la excepción es informativa, una advertencia o un error. Otro campo te indica la zona del sistema donde se produjo el error. El tercer y ultimo valor representa un código único que representa al tipo de error producido.
  • TargetSite: Si al producirse una excepción, no es posible saber que método la ha lanzado, esta propiedad saca de la StackTrace el ultimo método en ejecución en el instante antes de que se iniciara la excepción, y te lo muestra como causante de esta. Normalmente la información que te proporciona TargetSite coincide con la información que te proporciona ExceptionMethod, aunque puede ocurrir que no sea así cuando el error no lo haya producido el ultimo método ejecutado en la pila, sino algún hilo de ejecución simultaneo o un error externo a la aplicación.
  • ExceptionMethod: Esta propiedad te proporciona información acerca del método que inicio la excepción. Esta propiedad te muestra la información del método, sus parámetros, el alcance, el namespace o el assemby al que pertenece, a través de la propiedad “System.Reflection.MethodInfo”. También te permite conocer es estado de este método en el momento de la ejecución, mostrándote el valor de los parámetros o el valor devuelto por este.

Se podría entrar más en profundidad y por ejemplo, analizar los bytes almacenados en los registros de memoria o en la pila de procesos, o las direcciones de los punteros, pero la complejidad de ese análisis es grande y con las herramientas ya comentadas para mi son mas que suficientes.

Bueno Korsarios, espero que os sea de utilidad esta pequeña ayuda. Larga Vida y Prosperidad.

One Response to “Exception en .NET”

  1. Andynedine Says:

    No tiene que ver con el .NET, pero lo mejon del JAVA es sin duda tratar esas peasos de EXCEPTIONS XDDDDD Y lo bien que queda cuando salta una y está controlá a más no podé!!?? :D

Leave a Reply


Creative Commons Attribution 3.0 Unported
Creative Commons Attribution 3.0 Unported