2010-03-03 4 views
8

Wenn Exception angezeigt wird (oder allgemeiner - wenn es in String konvertiert wird), wird Stack-Trace angezeigt. Ich möchte das Format der Dateipfade des Quellcodes ändern, die in diesem Trace angezeigt werden.Wie formatiert Exceptions Stack-Trace in C#?

Insbesondere möchte ich nur Dateinamen (ohne vollständigen Pfad) lassen oder nur den Teil des Pfades anzeigen, der mit dem Basisverzeichnis des Projekts beginnt. Vollständige Pfade sind in der Regel nicht erforderlich und überfluten die gesamte Nachricht.

Wie kann ich das tun?

Antwort

23

Ich stellte eine ähnliche Frage, obwohl nicht ganz die gleiche, hier: .

Was können Sie tun, ist dies:

var trace = new System.Diagnostics.StackTrace(exception); 

, die Ihnen eine StackTrace Objekt gibt, die Ihnen alle Informationen, die Sie brauchen. In meinem Fall ging es darum, den lokalisierten Ausnahmetext zu vermeiden, aber ich könnte mir vorstellen, dass Sie den gleichen Ansatz für Ihre Bedürfnisse verwenden können.


bearbeiten: Ich stelle fest, dass ich einen Kommentar zu dem accepted answer auf meine Frage zu einem „needFileInfo“ Parameter an den Konstruktor im Zusammenhang hinzugefügt haben. Ich sehe diesen Konstruktor hier: StackTrace(Exception e, bool fNeedFileInfo), Ich kann den aktuellen Code in Frage jetzt nicht finden, aber ich würde vermuten, dass Sie true zu diesem Argument übergeben müssen. Ich denke, Experimente sind hier der Schlüssel.

Mit anderen Worten, ich denke, der Code dies sein sollte:

var trace = new System.Diagnostics.StackTrace(exception, true); 
+1

+1 schönen Tipp über StackTrace-Klasse. Ich habe nie gewusst, dass es eine Ausnahme als Konstruktorparameter geben kann! – Josh

+0

Wie unterscheidet sich das von "exception.StackTrace"? –

+4

Exception.StackTrace ist ein String. Dies ist eine Klasse, die programmatischen Zugriff auf Teile des Stack-Trace gibt, einschließlich Dateinamen, Zeilennummern, Klassennamen usw., und nicht als einzelne Zeichenfolge. –

2

Check-out-Methode der System.Diagnostics.StackFrame Klasse und die GetFileName. Sie können eine Methode schreiben, die den Stack-Trace und die Namen der Quelldateien erhält, die Sie in Ihrem Ausnahmebehandler aufrufen können.