Was ist der richtige Weg, um meine volle zu zeigen InnerException
.
Ich habe festgestellt, dass einige meiner InnerExceptions eine andere haben InnerException
und das geht ziemlich tief.
Erledige InnerException.ToString()
ich den Job für mich oder muss ich das durchlaufen InnerExceptions
und ein String
mit aufbauen StringBuilder
?
c#
exception
inner-exception
Willem
quelle
quelle
Antworten:
Sie können einfach drucken
exception.ToString()
- dazu gehört auch der vollständige Text für alle verschachteltenInnerException
s.quelle
ToString
Methoden für innere Ausnahmen aufgerufen, wie unter Warum ruft System.Exception.ToString keinen virtuellen ToString für innere Ausnahmen auf? .Benutz einfach
exception.ToString()
http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx
exception.ToString () ruft auch .ToString () für die innere Ausnahme dieser Ausnahme auf und so weiter ...
quelle
Normalerweise mag ich das, um den größten Teil des Rauschens zu entfernen:
Bearbeiten: Ich habe diese Antwort vergessen und bin überrascht, dass niemand darauf hingewiesen hat, dass Sie einfach tun können
quelle
error.GetBaseException()
. Ich glaube, das macht das gleiche ...Die Antwort von @ Jon ist die beste Lösung, wenn Sie alle Details (alle Nachrichten und die Stapelverfolgung) und die empfohlene Lösung wünschen.
Es kann jedoch Fälle geben, in denen Sie nur die inneren Nachrichten möchten, und für diese Fälle verwende ich die folgende Erweiterungsmethode:
Ich verwende diese Methode oft, wenn ich unterschiedliche Listener zum Verfolgen und Protokollieren habe und unterschiedliche Ansichten zu ihnen haben möchte. Auf diese Weise kann ich einen Listener haben, der den gesamten Fehler mit Stack-Trace per E-Mail an das Entwicklerteam zum Debuggen mit der
.ToString()
Methode sendet , und einen, der eine Anmeldedatei mit dem Verlauf aller Fehler schreibt, die jeden Tag ohne den Stack-Trace mit aufgetreten sind die.GetFullMessage()
Methode.quelle
ex
AggregateException
Um nur den
Message
Teil der tiefen Ausnahmen hübsch auszudrucken , können Sie Folgendes tun:Dies durchläuft rekursiv alle inneren Ausnahmen (einschließlich des Falls von
AggregateException
s), um alle darinMessage
enthaltenen Eigenschaften zu drucken , die durch Zeilenumbrüche begrenzt sind.Z.B
Sie müssen andere Ausnahmeeigenschaften anhören, um weitere Details zu erhalten. Zum Beispiel
Data
wird einige Informationen haben. Du könntest es tun:Um alle abgeleiteten Eigenschaften (nicht für die Basisklasse
Exception
) abzurufen, können Sie Folgendes tun:quelle
IEnumerable<Exception>
anstelle einer harten Codierung implementiert wirdAggregrateException
, um andere ähnliche Typen zu verarbeiten. Auch Probleme ausschließenp.IsSpecialName
undpi.GetIndexParameters().Length != 0
vermeiden. Es ist auch eine gute Idee, den Namen des Ausnahmetyps in die Ausgabe aufzunehmenIch mache:
Dies "druckt" alle inneren Ausnahmen und behandelt auch AggregateExceptions und Fälle, in denen InnerException.Message mit Message identisch ist
quelle
Wenn Sie Informationen zu allen Ausnahmen wünschen, verwenden Sie
exception.ToString()
. Es werden Daten aus allen inneren Ausnahmen gesammelt.Wenn Sie nur die ursprüngliche Ausnahme möchten, verwenden Sie
exception.GetBaseException().ToString()
. Dadurch erhalten Sie die erste Ausnahme, z. B. die tiefste innere Ausnahme oder die aktuelle Ausnahme, wenn keine innere Ausnahme vorliegt.Beispiel:
quelle
Aufbau auf Nawfals Antwort.
Als ich seine Antwort verwendete, fehlte eine Variable aggrEx. Ich fügte sie hinzu.
Datei ExceptionExtenstions.class:
quelle
e.StackTrace == null