调用堆栈上的异常处理堆栈帧的顺序

时间:2009-09-16 09:12:14

标签: .net exception-handling callstack

在C#中将异常处理堆栈帧推送到调用堆栈的顺序是什么。如果我有方法:

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

是否为每个异常处理程序创建了一个单独的堆栈帧,如下所示?

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

OR

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

OR

其他什么?

1 个答案:

答案 0 :(得分:1)

不,添加异常处理程序不会向调用堆栈添加新帧。它只是添加适当的信息,以便在抛出异常时,在调用堆栈的每个级别,框架可以找到该异常的适当处理程序(如果确实 是一个合适的处理程序)。

这有点像垃圾收集,在任何执行点,GC都可以计算出哪些局部变量仍然应该算作GC根源 - 基本上除了可执行代码本身之外还有更多的方法:)