Par exemple, en un seul endroit ...
//---------------a
try
{
// some network call
}
catch(WebException we)
{
throw new MyCustomException("some message ....", we);
}
... et dans un autre endroit ...
//--------------b
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(we.stacktrace); // <----------------
}
Le stacktrace que j'imprime, il ne commence que de a à b, il n'inclut pas le stacktrace interne de WebException.
Comment puis-je imprimer tout le stacktrace ???
throw;
à la place dethrow new MyCustomException(...)
si vous souhaitez conserver (et générer) la pile d'exceptions d'origine.Réponses:
J'utilise généralement la méthode .ToString () sur les exceptions pour présenter toutes les informations d'exception (y compris la trace de la pile interne) dans le texte:
Exemple de sortie:
la source
ToString
méthode et affichent des messages personnalisés au lieu des informations complètes (c'est une mauvaise pratique de codage, alors ne faites pas cela, jamais)ToString
chaque fois que je suis sûr qu'il n'est pas écrasé, et j'utilise directement les propriétés autrement (comme la réponse d'Andrew Hare ).Utilisez une fonction comme celle-ci:
Ensuite, vous pouvez l'appeler comme ceci:
la source
ToString
?1. Créer une méthode: Si vous passez votre exception à la fonction suivante, elle vous donnera toutes les méthodes et détails qui sont les raisons de l'exception.
2. Méthode d'appel: Vous pouvez appeler la méthode comme ceci.
3. Obtenez le résultat:
la source
StringBuilder
class.