C#中的异常如何工作(幕后)

时间:2010-09-21 14:42:27

标签: c# .net exception try-catch throw

与“How do exceptions work (behind the scenes) in C++”相同,但 C#

我知道在抛出异常时必须执行以下步骤。

  1. 查找异常类型的最近处理程序;
  2. 将堆栈展开到处理程序级别;
  3. 调用处理程序;
  4. 查找并调用每个finally块。
  5. .NET如何处理这些操作? “当前”处理程序的映射如何工作? try / catch块中发出了多少代码?在一个扔石块?

3 个答案:

答案 0 :(得分:15)

阅读Christopher Brumme的文章;它详细解释了CLR异常处理中幕后发生的事情:

http://blogs.msdn.com/b/cbrumme/archive/2003/10/01/51524.aspx

答案 1 :(得分:4)

Windows上的.NET异常使用操作系统的基础Structured Exception Handling(SEH)机制,与本机代码相同。正如linked question for C (and C++)

中所列

答案 2 :(得分:3)

.NET异常使用基础Windows结构化异常处理实现,但这不是 的要求。 Mono可能采用不同的方式。

事实上,如果你编写一个只抛出异常的单行Console应用程序,然后在Windbg中运行它,你就会看到非托管异常处理的钩子。