Die interne Implementierung der Ausnahmebehandlung

8

Heute, wenn ich einen Code wie diesen schreibe:

%Vor%

Ich erkenne plötzlich, dass das

%Vor%

Anweisung ist so sehr wie eine Funktionsdeklaration. Und ich erinnerte mich vage daran, dass die Ausnahmebehandlung eine Art Stack-Walking / Manipulation beinhaltet.

Also, Was genau ist der obige Ausnahmebehandlungscode? Ich habe das Gefühl, dass der obige Code nur eine spezielle / bequeme Syntax ist, um unser Codieren zu erleichtern, aber in der Tat vielleicht unser Code ist in eine automatisch generierte Ausnahmebehandlung eingebunden? Ich hoffe, ich habe mich klar gemacht.

    
smwikipedia 19.04.2011, 16:10
quelle

2 Antworten

9

Zum Glück hat CLR-Architekt Chris Brumme eine lange Erklärung dazu geschrieben, wie die Ausnahmebehandlung in der CLR funktioniert. Nun, das wurde vor acht Jahren geschrieben und ein paar der Details sind heute etwas anders, aber das sollte dir wenigstens einen guten Start geben.

Ссылка

    
Eric Lippert 19.04.2011, 18:53
quelle
6

Dies ist ein guter Ausgangspunkt: Ссылка

Im Grunde sind sie so etwas wie Funktionen, aber nicht wirklich. Sie werden nicht per se aufgerufen, sie haben keinen separaten Stack-Frame (oder separaten Stack), sondern verwenden stattdessen den Stack-Frame der aktuellen Funktion. Deshalb können Sie auf lokale Variablen zugreifen.

Wenn Sie sehen wollen, in was es kompiliert wird, können Sie ILDasm.exe verwenden, um eine Assembly zu dekompilieren, die Ausnahmeblöcke hat (machen Sie ein Beispielprogramm und dekompilieren Sie es). Alternativ verwenden Sie RedGate Reflector für eine bessere Dekompilierung Erfahrung.

Wenn die IL nicht genug ist, können Sie auf die generierte Assembly zugreifen, indem Sie Ihr Programm im Debug-Modus in Visual Studio ausführen, einen Haltepunkt in der Methode setzen und dann, wenn dieser Haltepunkt erreicht wird, die Disassembly-Registerkarte / das Fenster öffnen das Debug-Menü.

    
siride 19.04.2011 16:20
quelle