¿Existe un método equivalente en C # al de Java Exception.printStackTrace()
o tengo que escribir algo yo mismo, trabajando en las InnerExceptions?
Respuestas:
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 ToString
no se requiere la llamada a, ya que hay una sobrecarga que toma System.Object
y llama ToString
directamente.
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()
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine (myException.StackTrace);
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
¿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.
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