2012-09-25 16 views
7

Kann ich etwas Text in den Stack-Trace werfen?In stacktrace schreiben

Meine Anwendung hat bereits die Ausnahmen ausgelöst. Möchte aber mehr Informationen über einige Methoden (Parameter) haben.

Die Idee war so etwas wie

StackTrace.Insert (0, "argument:" + test); 

Ich weiß, das ist nicht cool zu tun ist, aber ist es möglich?

+0

Wäre das ausreichend? 'throw new InvalidOperationException (" argument1: "+ test +", argument2: "+ test2);' –

+0

aber es wird meine Methode stoppen, nein? –

+4

Die Lösung könnte darin bestehen, die Ausnahme zu erstellen und die Parameter in die [Datenwörterbuch-Eigenschaft] (http://msdn.microsoft.com/en-us/library/system.exception.data (v = vs.100)) zu setzen. .aspx)? (Dann werfen Sie die Ausnahme ...) – erikH

Antwort

13

Erstellen Sie die Ausnahme, und die Parameter in der Data dictionary property setzen. Dann werfen die Ausnahme ...

+1

machte es eine Antwort, da mein Kommentar als nützlich gewählt wurde, und ich denke, es ist eher eine Antwort als ein Kommentar. – erikH

+0

Sehr schön. Der Schlüssel ist, diese neu erstellte Ausnahme zu werfen, andernfalls wird der StackTrace nicht aufgefüllt. – puddinman13

2

Per Definition ist der Stack-Trace eine Ausgabe der aktiven Stack-Frames am aktuellen Ausführungspunkt in einem Programm, auf die normalerweise über eine Exception zugegriffen wird.

@David Yaw gab Ihnen den richtigen Weg, um zusätzliche Informationen zu einem Stack-Trace hinzuzufügen, da dieser den Exception-Stack aufbläht. Um es anders zu formulieren, sollten Sie Ihre benutzerdefinierten Daten nur dann zum Stack-Trace hinzufügen, wenn es sich um eine Ausnahme handelt.

Erstellen Sie entweder eine zentral zugängliche List-Auflistung, in der Protokollierungsdaten gespeichert werden, oder verwenden Sie das richtige try/catch mit Ausnahmesprudeln, wie von David empfohlen.

zum Beispiel.

try 
{ 
    doSomethingThatMightFailAndThrowAnException(); 
} 
catch (Exception ex) 
{ 
    throw new Exception("Here is some custom data to add to the trace...",ex); 
    // Notice adding the ex as the second parameter preserves the original exception trace 
} 
5

Gerade @ Erikh die ausgezeichnete Antwort hinzuzufügen:

Zusätzlich zur Verwendung der Data Eigenschaft, wenn Sie die Ausnahme Kette bis max zusätzliche Daten benötigen, so können Sie dies durch eine benutzerdefinierte Ausnahme Zusätzlich zu den Meta-Informationen, die ein benutzerdefinierter Typ bereitstellen kann (ein CommunicationException kann ein Problem mit E/A sein, ein InvalidStateException könnte bedeuten, dass das Programm einen ungültigen Status gefunden hat usw.) können Sie der Ausnahme zusätzliche Informationen hinzufügen Form von benutzerdefinierten Feldern. Benutzerdefinierte Felder sind besonders nützlich, wenn Sie eine Typensicherheit benötigen, die die Data-Eigenschaft nicht bietet.

Verwandte Themen