在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
其他什么?
答案 0 :(得分:1)
不,添加异常处理程序不会向调用堆栈添加新帧。它只是添加适当的信息,以便在抛出异常时,在调用堆栈的每个级别,框架可以找到该异常的适当处理程序(如果确实 是一个合适的处理程序)。
这有点像垃圾收集,在任何执行点,GC都可以计算出哪些局部变量仍然应该算作GC根源 - 基本上除了可执行代码本身之外还有更多的方法:)