2008-12-02 27 views

Respuesta

87

Prueba esto:

Console.WriteLine(ex.ToString()); 

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

La implementación predeterminada de ToString obtiene el nombre de la clase que lanzó la excepción actual, el mensaje, el resultado de llamar 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.

Tenga en cuenta que en el código anterior no es necesaria la llamada a ToString ya que hay una sobrecarga que lleva System.Object y llama ToString directamente.

0

¿No hay una API de registro de C# que pueda tomar una excepción como argumento y manejar todo por usted, como lo hace Log4J de Java?

Es decir, use Log4NET.

+0

buena pregunta :) – Epaga

+3

es una buena pregunta, pero no es una buena respuesta –

+0

Creo que señala por qué Microsoft podría no haber proporcionado tal funcionalidad en C# que Java lo hizo (siendo el lenguaje más antiguo desarrollado en tiempos más simples). Es decir, hay una mejor manera que se recomienda. – JeeBee

1
catch (Exception ex) 
{ 
    Console.WriteLine(ex.StackTrace); 
} 
+1

Eso no incluirá el mensaje o los detalles de la excepción interna. –

+0

Gotcha. Gracias por la info. –

9

Como dice Drew, al convertir la excepción una cadena hace esto. Por ejemplo, este programa:

using System; 

class Test 
{ 
    static void Main() 
    { 
     try 
     { 
      ThrowException(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 

    static void ThrowException() 
    { 

     try 
     { 
      ThrowException2(); 
     } 
     catch (Exception e) 
     { 
      throw new Exception("Outer", e); 
     } 
    } 

    static void ThrowException2() 
    { 
     throw new Exception("Inner"); 
    } 
} 

produce esta salida:

System.Exception: Outer ---> System.Exception: Inner 
    at Test.ThrowException2() 
    at Test.ThrowException() 
    --- End of inner exception stack trace --- 
    at Test.ThrowException() 
    at Test.Main() 
-1

También se fijan en Log4net ... es un puerto de Log4J a .NET.

69

me gustaría añadir: Si desea imprimir la pila fuera de una excepción, puede utilizar:

Console.WriteLine(System.Environment.StackTrace); 
+0

Maravilloso. Esto ayuda mucho. Muchas gracias Ryan – siddhusingh