2

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

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

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

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

或者

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

或者

别的东西?

4

1 回答 1

1

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

这有点像垃圾回收,在任何执行点,GC 都可以计算出哪些局部变量仍应算作 GC 根 - 本质上,方法比可执行代码本身更多:)

于 2009-09-16T09:21:23.090 回答