2010-01-16 53 views

回答

1

实现细节非常好隐藏。 Brumme的博客和Rotor源代码都没有提供现成的答案。我知道的一件事是,try语句不会生成任何代码。这使得很少有可能的方法。我认为它的做法与64位Windows中的SEH相同。

我相信JIT编译器会生成一个代码地址表,其中包含一个指向处理异常时调用的异常过滤器的函数指针。 throw语句调用一个查看方法返回地址的栈走。该表将返回地址映射到相应的异常过滤器。异常过滤器决定异常是否与方法中的catch子句匹配。并将控制权转移给catch子句中的代码。值得注意的是,Visual Basic Catch When语句(在C#中不可用)与SEH在Windows中实现的方式非常匹配。

我没有证据证明这一点,也不知道任何权威来源。这只是一种可能的工作方式。