it-swarm.com.de

C # entspricht Exception.printStackTrace () von Java?

Gibt es eine C # -Äquivalenzmethode zu Javas Exception.printStackTrace() oder muss ich selbst etwas schreiben und mich durch die InnerExceptions arbeiten?

76
Epaga

Versuche dies:

Console.WriteLine(ex.ToString());

From 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 es eine Überladung gibt, die System.Object und ruft ToString direkt auf.

112
Drew Noakes

Ich möchte hinzufügen: Wenn Sie den Stapel außerhalb einer Ausnahme drucken möchten, können Sie Folgendes verwenden:

Console.WriteLine(System.Environment.StackTrace);
88
Ryan Cook

Wie Drew sagt, wird dies nur durch Konvertieren der Ausnahme eines Strings erreicht. 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()
10
Jon Skeet
2
nbevans
  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}
1

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.

0
JeeBee