Czy istnieje metoda C # równoważna z Javą, Exception.printStackTrace()
czy też muszę napisać coś samodzielnie, przechodząc przez InnerExceptions?
Odpowiedzi:
Spróbuj tego:
Console.WriteLine(ex.ToString());
Z http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx :
Domyślna implementacja ToString uzyskuje nazwę klasy, która zgłosiła bieżący wyjątek, komunikat, wynik wywołania ToString w przypadku wyjątku wewnętrznego oraz wynik wywołania Environment.StackTrace. Jeśli którykolwiek z tych elementów członkowskich ma wartość null, jego wartość nie jest uwzględniana w zwracanym ciągu.
Zauważ, że w powyższym kodzie wywołanie ToString
nie jest wymagane, ponieważ istnieje przeciążenie, które pobiera System.Object
i wywołuje ToString
bezpośrednio.
Jak mówi Drew, wystarczy przekonwertować wyjątek na łańcuch. Na przykład ten program:
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");
}
}
Tworzy ten wynik:
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);
}
Czy nie ma interfejsu API C # Logging, który może przyjąć wyjątek jako argument i obsłużyć wszystko za Ciebie, tak jak robi to Java Log4J?
To znaczy użyj Log4NET.
Ponieważ odpowiedź @ ryan-cook nie zadziałała dla mnie, jeśli chcesz wydrukować ślad stosu bez wyjątku, możesz użyć:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
Niestety nie można tego zrobić w PCL lub w bibliotece .NETStandard