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

jpb*_*chi 19 .net c# exception try-catch throw

与" 如何在C++中实现异常(在幕后) "相同,但对于C#.

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

  1. 找到异常类型的最近处理程序;
  2. 将堆栈展开到处理程序级别;
  3. 调用处理程序;
  4. 查找并调用每个finally块.

.NET如何处理这些操作?"当前"处理程序的映射如何工作?try/catch块中发出了多少代码?在一个扔石块?

Eri*_*ert 15

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

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


Ric*_*ard 4

Windows 上的 .NET 异常使用操作系统的底层结构化异常处理(SEH) 机制,与本机代码的方式相同。如C (和 C++) 的链接问题中所列。