remarks cref c# exception inner-exception

cref - remarks c#



¿Cuál es la forma correcta de mostrar la InnerException completa? (4)

¿Cuál es la forma correcta de mostrar mi InnerException completa InnerException

Descubrí que algunas de mis InnerExceptions tienen otra InnerException y eso es bastante profundo.

¿ InnerException.ToString() hará el trabajo por mí o InnerExceptions recorrer las InnerExceptions y crear una String con StringBuilder ?


La respuesta de @Jon es la mejor solución cuando se desea obtener todos los detalles (todos los mensajes y el seguimiento de la pila) y la recomendada.

Sin embargo, puede haber casos en los que solo desee los mensajes internos, y para estos casos uso el siguiente método de extensión:

public static class ExceptionExtensions { public static string GetFullMessage(this Exception ex) { return ex.InnerException == null ? ex.Message : ex.Message + " --> " + ex.InnerException.GetFullMessage(); } }

A menudo uso este método cuando tengo diferentes oyentes para rastrear y registrar y quiero tener diferentes puntos de vista sobre ellos. De esta forma puedo tener un oyente que envía el error completo con seguimiento de pila por correo electrónico al equipo de desarrollo para la depuración usando el método .ToString() y uno que escribe un archivo de inicio de sesión con el historial de todos los errores que ocurrieron cada día sin el seguimiento de pila con el método .GetFullMessage() .


Normalmente me gusta para eliminar la mayor parte del ruido:

void LogException(Exception error) { Exception realerror = error; while (realerror.InnerException != null) realerror = realerror.InnerException; Console.WriteLine(realerror.ToString()) }


Simplemente puede imprimir exception.ToString() , que también incluirá el texto completo de todas las InnerException s anidadas.


Solo use exception.ToString()

http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx

La implementación predeterminada de ToString obtiene el nombre de la clase que arrojó la excepción actual, el mensaje, el resultado de llamar a ToString en la excepción interna y el resultado de llamar a Environment.StackTrace. Si alguno de estos miembros es nulo, su valor no se incluye en la cadena devuelta.

Si no hay un mensaje de error o si es una cadena vacía (""), no se devuelve ningún mensaje de error. El nombre de la excepción interna y el seguimiento de pila se devuelven solo si no son nulos.

exception.ToString () también llamará a .ToString () en la excepción interna de esa excepción, y así sucesivamente ...