在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

其他什么?

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top