web-dev-qa-db-fra.com

C # équivalent à Exception.printStackTrace () de Java?

Existe-t-il une méthode équivalente en C # à la Exception.printStackTrace() de Java ou dois-je écrire quelque chose moi-même, en suivant les InnerExceptions?

76
Epaga

Essaye ça:

Console.WriteLine(ex.ToString());

De http://msdn.Microsoft.com/en-us/library/system.exception.tostring.aspx :

L'implémentation par défaut de ToString obtient le nom de la classe qui a levé l'exception actuelle, le message, le résultat de l'appel à ToString sur l'exception interne et le résultat de l'appel à Environment.StackTrace. Si l'un de ces membres est null, sa valeur n'est pas incluse dans la chaîne renvoyée.

Notez que dans le code ci-dessus, l'appel à ToString n'est pas requis car il y a une surcharge qui prend System.Object et appelle directement ToString.

112
Drew Noakes

Je voudrais ajouter: Si vous souhaitez imprimer la pile en dehors d'une exception, vous pouvez utiliser:

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

Comme le dit Drew, il suffit de convertir l'exception en une chaîne. Par exemple, ce programme:

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");
    }
}

Produit cette sortie:

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
Steve Brouillard

N'existe-t-il pas d'API de journalisation C # qui peut prendre une exception comme argument et gérer tout pour vous, comme le fait Log4J de Java?

C'est-à-dire, utilisez Log4NET.

0
JeeBee