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?
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
.
Je voudrais ajouter: Si vous souhaitez imprimer la pile en dehors d'une exception, vous pouvez utiliser:
Console.WriteLine(System.Environment.StackTrace);
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()
http://msdn.Microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine (myException.StackTrace);
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
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.