1
是否有人知道有关栈的框架上的异常句柄的细节或内存布局的文章?异常处理程序如何在堆栈的一个框架上注册?
是否有人知道有关栈的框架上的异常句柄的细节或内存布局的文章?异常处理程序如何在堆栈的一个框架上注册?
实现细节非常好隐藏。 Brumme的博客和Rotor源代码都没有提供现成的答案。我知道的一件事是,try语句不会生成任何代码。这使得很少有可能的方法。我认为它的做法与64位Windows中的SEH相同。
我相信JIT编译器会生成一个代码地址表,其中包含一个指向处理异常时调用的异常过滤器的函数指针。 throw语句调用一个查看方法返回地址的栈走。该表将返回地址映射到相应的异常过滤器。异常过滤器决定异常是否与方法中的catch子句匹配。并将控制权转移给catch子句中的代码。值得注意的是,Visual Basic Catch When语句(在C#中不可用)与SEH在Windows中实现的方式非常匹配。
我没有证据证明这一点,也不知道任何权威来源。这只是一种可能的工作方式。
上下文是什么?你能否提供更多的信息? – 2010-01-16 15:42:55
首先阅读以下内容:http://blogs.msdn.com/cbrumme/archive/2003/10/01/51524.aspx – 2010-01-16 15:47:22