2010-05-05 46 views
4

在試圖找到可能的異常原因時,我使用Reflector來跟蹤代碼路徑。我有越陷越深,但最終在方法調用看起來像:是否可以將標記爲MethodImplOptions.InternalCall的方法鏈接到其實現?

[MethodImpl(MethodImplOptions.InternalCall)] 
private extern void SomeMethod(int someParameter); 

此標記的方法告訴框架某處調用C++函數。有什麼方法可以找出實際調用的方法,反過來又可能調用什麼?

注:我真的不想看到這個方法的源代碼,我只是想知道可能的事情,可能會拋出異常,我看到源於此方法調用。

回答

3

內部調用最終調用CLR中的C++函數。你可以在Rotor source code找到它們。查看clr \ src \ vm \ ecall.cpp以查找從.NET可見名稱到CLR函數名稱的映射。注意源代碼已過時。

+0

通過對http://www.koders.com/cpp/fid006DC4C11F458707221DA6ED2ED9CC3C7AE12E11.aspx和HTTP的組合:/ /www.koders.com/cpp/fidFB82C2FF644D476EBEFA132529BA1A6DCA264698.aspx我設法得到我想要的。 – adrianbanks 2010-05-05 21:13:24

0

如果你想跟蹤哪些方法可以拋出一個給定類型的異常,你可以使用http://www.red-gate.com/products/Exception_Hunter/index.htm

+0

我知道那個工具。它是否也檢測到由於框架的C++函數中的代碼而拋出的異常(例如,這一行拋出 - > http://www.koders.com/cpp/fidFB82C2FF644D476EBEFA132529BA1A6DCA264698.aspx#L1632)? – adrianbanks 2010-05-27 15:58:57

相關問題