2010-09-21 13 views
16

Identisch mit "How do exceptions work (behind the scenes) in C++", aber für C#.Wie funktionieren Ausnahmen (hinter den Kulissen) in C#

Ich weiß, dass die folgenden Schritte ausgeführt werden müssen, wenn eine Ausnahme ausgelöst wird.

  1. Suchen Sie den nächstgelegenen Handler für den Ausnahmetyp;
  2. Abwickeln des Stapels bis zur Handler-Ebene;
  3. Rufen Sie den Handler an;
  4. Finden und rufen Sie alle finally Blöcke.

Wie behandelt .NET diese Operationen? Wie funktioniert das Mapping für die "aktuellen" Handler? Wie viel Code wird in einem try/catch-Block ausgegeben? Und in einem Wurfblock?

+3

Sie ein paar Schritte verpasst haben, zumindest: zu sehen, ob es irgendwelche Ausnahmefilter installiert sind (sie vor dem Fang einlassen Blöcke) und führt alle abschließenden Blöcke aus, während sich der Stapel abwickelt. –

+0

Tatsächlich habe ich die letzten Blöcke vergessen. Lass mich das korrigieren. – jpbochi

Antwort

3

.NET-Ausnahmen verwenden die zugrundeliegende strukturierte Windows-Ausnahmebehandlungsimplementierung, obwohl dies nicht eine Anforderung ist. Mono kann es anders machen.

In der Tat, wenn Sie eine einzeilige Konsole App schreiben, die nur eine Ausnahme auslöst, und dann in Windbg ausführen, sehen Sie den Haken in der nicht verwalteten Ausnahmebehandlung.

+0

Kannst du mir eine spezielle Referenz zur Mono-Implementierung geben? Ich möchte etwas darüber erfahren. – Maniero

+0

@Maniero Ich weiß nichts über die Mono-Implementierung. –

Verwandte Themen