Gibt es eine C # -äquivalente Methode zu Java Exception.printStackTrace()
oder muss ich selbst etwas schreiben, um mich durch die InnerExceptions zu arbeiten?
Antworten:
Versuche dies:
Console.WriteLine(ex.ToString());
Von http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx :
Die Standardimplementierung von ToString erhält den Namen der Klasse, die die aktuelle Ausnahme ausgelöst hat, die Nachricht, das Ergebnis des Aufrufs von ToString für die innere Ausnahme und das Ergebnis des Aufrufs von Environment.StackTrace. Wenn eines dieser Elemente null ist, ist sein Wert nicht in der zurückgegebenen Zeichenfolge enthalten.
Beachten Sie, dass im obigen Code der Aufruf von ToString
nicht erforderlich ist, da eine Überlastung vorliegt, die direkt System.Object
anruft ToString
.
Wie Drew sagt, bewirkt dies nur das Konvertieren der Ausnahme eines Strings. Zum Beispiel dieses Programm:
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");
}
}
Erzeugt diese Ausgabe:
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);
}
Gibt es keine C # -Protokollierungs-API, die eine Ausnahme als Argument verwenden und alles für Sie erledigen kann, wie es Javas Log4J tut?
Verwenden Sie also Log4NET.
Da die Antwort von @ ryan-cook bei mir nicht funktioniert hat, können Sie Folgendes verwenden, wenn Sie den Stack-Trace ohne Ausnahme drucken möchten:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
Dies ist leider nicht in einer PCL oder in einer .NETStandard-Bibliothek möglich