2010-01-16 20 views

回答

1

實現細節非常好隱藏。 Brumme的博客和Rotor源代碼都沒有提供現成的答案。我知道的一件事是,try語句不會生成任何代碼。這使得很少有可能的方法。我認爲它的做法與64位Windows中的SEH相同。

我相信JIT編譯器會生成一個代碼地址表,其中包含一個指向處理異常時調用的異常過濾器的函數指針。 throw語句調用一個查看方法返回地址的棧走。該表將返回地址映射到相應的異常過濾器。異常過濾器決定異常是否與方法中的catch子句匹配。並將控制權轉移給catch子句中的代碼。值得注意的是,Visual Basic Catch When語句(在C#中不可用)與SEH在Windows中實現的方式非常匹配。

我沒有證據證明這一點,也不知道任何權威來源。這只是一種可能的工作方式。

相關問題