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