Zum Beispiel an einem Ort ...
//---------------a
try
{
// some network call
}
catch(WebException we)
{
throw new MyCustomException("some message ....", we);
}
... und an einem anderen Ort ...
//--------------b
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(we.stacktrace); // <----------------
}
Der Stacktrace, den ich drucke, beginnt nur von a nach b, enthält nicht den inneren Stacktrace aus der WebException.
Wie kann ich den gesamten Stacktrace drucken?
throw;
anstelle von ,throw new MyCustomException(...)
wenn Sie wollen , zu erhalten (und Ausgang) , um die ursprüngliche Ausnahme - Stack.Antworten:
Normalerweise verwende ich die .ToString () -Methode für Ausnahmen, um die vollständigen Ausnahmeinformationen (einschließlich der inneren Stapelverfolgung) im Text darzustellen:
Beispielausgabe:
quelle
ToString
Methode und benutzerdefinierte Nachrichten anstelle der vollständigen Informationen drucken (dies eine schlechte Codierung der Praxis ist, so kann nicht das tun, überhaupt)ToString
wenn ich sicher bin, dass es nicht überschrieben wird, und verwende die Eigenschaften direkt anderweitig (wie die Antwort von Andrew Hare ).Verwenden Sie eine Funktion wie diese:
Dann können Sie es so nennen:
quelle
ToString
?1. Methode erstellen: Wenn Sie Ihre Ausnahme an die folgende Funktion übergeben, erhalten Sie alle Methoden und Details, die Gründe für die Ausnahme sind.
2. Aufrufmethode: Sie können die Methode folgendermaßen aufrufen.
3. Holen Sie sich das Ergebnis:
quelle
StringBuilder
Klasse verwenden.