调用堆栈上的异常处理堆栈帧的顺序
-
07-07-2019 - |
题
在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根源 - 基本上除了可执行代码本身之外还有更多的方法:)
不隶属于 StackOverflow