C # equivalente a Exception.printStackTrace () de Java?


83

¿Existe un método equivalente en C # al de Java Exception.printStackTrace()o tengo que escribir algo yo mismo, trabajando en las InnerExceptions?

Respuestas:


120

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 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.

Tenga en cuenta que en el código anterior ToStringno se requiere la llamada a, ya que hay una sobrecarga que toma System.Objecty llama ToStringdirectamente.


1
Lo probé en .Net Core 2.1 en Linux y parece que ya no es cierto
selalerer

104

Me gustaría agregar: Si desea imprimir la pila fuera de una excepción, puede usar:

Console.WriteLine(System.Environment.StackTrace);

10

Como dice Drew, simplemente convertir la excepción en 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()



0

¿No existe 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.


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

0

Como la respuesta de @ ryan-cook no funcionó para mí, si desea imprimir el seguimiento de la pila sin tener una excepción, puede usar:

System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)

Desafortunadamente, esto no se puede hacer en una PCL o en una biblioteca estándar .NET


-1

También mire Log4Net ... es un puerto de Log4J a .NET.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.