Pregunta

¿Cuál es el orden en que los marcos de la pila de manejo de excepciones se insertan en la pila de llamadas en, por ejemplo, C #. Si tengo un método:

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

¿Se crea un marco de pila separado para cada controlador de excepciones de la siguiente manera?

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

O

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

O

algo más?

¿Fue útil?

Solución

No, agregar un controlador de excepción no agrega un nuevo marco a la pila de llamadas. Simplemente agrega información adecuada para que cuando se produzca una excepción, en cada nivel de la pila de llamadas, el marco pueda encontrar el controlador apropiado para esa excepción (si de hecho es un controlador apropiado).

Es un poco como la recolección de basura, donde en cualquier punto de ejecución el GC puede determinar qué variables locales aún deben contar como raíces del GC: esencialmente hay más en un método que el código ejecutable en sí :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top