Throw Exceptions mit benutzerdefiniertem Stack-Trace

8

Ist es möglich, eine Ausnahme (könnte irgendeine Ausnahme sein) mit einem benutzerdefinierten Stack-Trace zu werfen?

Als konkretes Beispiel: Nehmen wir an, ich habe einige kleine statische Hilfsmethoden, die Ausnahmen auslösen können. Allerdings möchte ich, dass die Ausnahme scheinbar von der vorherigen Methode anstelle der Hilfsmethode stammt (ich möchte den ersten Frame der Kurve ignorieren).

    
Joseph Daigle 26.05.2009, 19:59
quelle

2 Antworten

3

Um mit der Stack-Spur herumzukommen, klingt wirklich nicht nach einer guten Idee, auch wenn es möglich ist (ich bezweifle das). Sag mir, warum würdest du das überhaupt machen wollen? Das .NET-Framework selbst (die BCL) verwendet oft statische Hilfsmethoden, um Exceptions auf die von Ihnen vorgeschlagene Art und Weise zu werfen ( ThrowHelper ist sein Name in mindestens einigen Teilen des Frameworks), und es versteckt auf jeden Fall alles im Stack verfolgen.

Hier ist eine Beispiel-Stack-Ablaufverfolgung von einem Test, den ich gerade ausgeführt habe:

%Vor%

Wie Sie sehen können, verwendet die BCL die ThrowArgumentOutOfRangeException -Methode und ist im Stack-Trace deutlich sichtbar. Wenn Sie die Hilfsmethode mit dem DebuggerNonUserCode -Attribut markieren wollen, dann erscheint mir das ziemlich fair (obwohl es in der BCL nicht gemacht wird).

    
Noldorin 26.05.2009, 20:09
quelle
12

Die StackTrace-Eigenschaft ist virtuell - Erstellen Sie Ihre eigene abgeleitete Exception-Klasse und lassen Sie die Eigenschaft zurückgeben, was Sie wollen.

    
James Cadd 26.05.2009 20:09
quelle