等同于 “How do exceptions work (behind the scenes) in C++”,但对于C#。如何例外在C#中工作(幕后)
我知道在抛出异常时必须执行下面的步骤。
- 查找异常类型最接近的处理程序;
- 展开堆栈直至处理程序级别;
- 调用处理程序;
- 查找并致电每个
finally
块。
如何处理.NET这些操作? “当前”处理程序的映射如何工作?在try/catch块中发出多少代码?并在一个投掷块?
等同于 “How do exceptions work (behind the scenes) in C++”,但对于C#。如何例外在C#中工作(幕后)
我知道在抛出异常时必须执行下面的步骤。
finally
块。如何处理.NET这些操作? “当前”处理程序的映射如何工作?在try/catch块中发出多少代码?并在一个投掷块?
阅读Christopher Brumme的文章;它给人的CLR异常处理幕后发生的事情很详细的解释:
http://blogs.msdn.com/b/cbrumme/archive/2003/10/01/51524.aspx
在Windows .NET异常使用OS”底层Structured Exception Handling(SEH)机制,以同样的方式为本地代码。如linked question for C (and C++)中所列。
.NET异常使用结构化异常处理实现基本的Windows,虽然这不是一个要求。单声道可能会有所不同。
事实上,如果你写了一个单行控制台应用程序,只是抛出一个异常,然后在WinDbg中运行它,你会看到勾入非托管异常处理。
你能否提供一些关于Mono实现的具体参考,我想了解一下。 – Maniero 2017-10-09 18:56:19
@Maniero我对Mono的实现一无所知。 – 2017-10-09 21:30:04
你错过了几个步骤,至少包括:是否有安装任何异常过滤器(他们涉足的前捕获块),并在堆栈展开时执行任何最终块。 – 2010-09-21 14:45:24
的确,我忘了最后的块。让我纠正一下。 – jpbochi 2010-09-21 16:31:50