2 Stimmen

Gibt es eine einfache Möglichkeit, ein für den Menschen lesbares Objektdiagramm auszugeben (speziell für eine Ausnahme)

Ich habe einen unbehandelten Exception-Handler (ein Oxymoron, wenn es je eines gab), aber ich möchte mehr Informationen aus ihm heraus zu erhalten.

Momentan werden die Ausnahmemeldung, der Stacktrace usw. protokolliert, und das Gleiche gilt für alle inneren Ausnahmen. Allerdings ist die Ausnahme oft ein abgeleiteter Typ der Ausnahmeklasse und daher weiß ich nicht im Voraus, wie sie aussehen wird. Ich möchte also einen Code, der mit Hilfe von Reflection alle primitiven Felder und Eigenschaften als Name/Wert-Paare in eine Textdatei ausgibt und dann rekursiv dasselbe für alle nicht-primitiven Objekte im Objektgraphen tut.

Ich habe versucht, das selbst zu machen, aber ich habe schnell gemerkt, dass ich mich um die Abholung usw. kümmern muss, und dass das sicher schon mal jemand gemacht hat. Eine weitere Option könnte sein, Serialisierung ich vermute, zu verwenden.

Hat das schon mal jemand gemacht? Gibt es schon einen Code?

0voto

Justin Punkte 82143

Sie könnten Reflection verwenden, um alle Eigenschaften der Exception auszugeben. Allerdings sollten Sie mit zu komplexem Logging-/Ausnahmebehandlungscode vorsichtig sein, da eine Exception innerhalb Ihres Exception-Handlers Ihnen wahrscheinlich keine nützlichen Debug-Informationen zur Verfügung stellt, um Ihre ursprüngliche Exception zu debuggen. Insbesondere, wenn Sie rekursiv alle nicht-primativen Objekte dieser Exception ausgeben wollen, sollten Sie bedenken, was passiert, wenn Sie irgendwelche zirkulären Referenzen haben.

Ich verwende in der Regel ex.ToString(), wenn ich alles protokollieren möchte - das sieht nicht schön aus und enthält möglicherweise keine todo der Daten in der Ausnahme (es sei denn, Basisklassen haben die ToString()-Methode überladen), aber ich finde, im Allgemeinen enthält es genug Informationen.

Wenn Sie mit benutzerdefinierten Ausnahmen arbeiten, über die Sie die Kontrolle haben, ist die Serialisierung wahrscheinlich die bessere Lösung.

0voto

Brandon Punkte 483

Ich würde einen Blick auf die ELMAH Projekt. Es ist für ASP.NET, so dass Sie nicht in der Lage, es zu verwenden out of the box für ein WinForms-Projekt, aber es könnte einige Ideen, die etwas zünden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X