Frage

Was ist die Reihenfolge, in der die Ausnahmebehandlung Stapelrahmen auf den Call-Stack geschoben werden sagen C #. Wenn ich eine Methode:

private void MyMethod() {
  try {
    DoSomething();  
  }
  catch (Exception ex)
  {
    //Handle
  }
}

Ist ein separater Stapelrahmen für jeden Exception-Handler wie folgt erstellt?

DoSomething stackframe<br/>
Exception stackframe<br/>
MyMethod stackframe<br/>

oder

DoSomething stackframe<br />
MyMethod stackframe<br />
Exception stackframe<br />

oder

etwas anderes?

War es hilfreich?

Lösung

Nein, eine Exception-Handler nicht das Hinzufügen eines neuen Rahmens zu den Call-Stack hinzufügen. Es kommt noch hinzu, entsprechende Informationen, so dass, wenn eine Ausnahme ausgelöst wird, auf jeder Ebene des Anrufs den Rahmen stapelt die entsprechenden Handler für diese Ausnahme finden kann (wenn es über ist ein entsprechender Handler).

Es ist ein bisschen wie Garbage Collection, wo an jedem Punkt der Ausführung kann die GC arbeitet heraus, welche lokale Variablen noch als GC Wurzeln zählen sollen - im Wesentlichen gibt es mehr auf ein Verfahren als der ausführbare Code selbst:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top