我想使用ICorDebug API从调试器获取debugee函数的本机(x86)代码。在获得ICorDebugFunction之后,我可以在其上调用GetNativeCode,但只有在它被Jited时才返回本机代码。所以我需要强有力地抓住它。 RuntimeHelpers.PrepareMethod可以做到这一点,但它需要一个方法句柄(不是方法标记)。从调试器我有方法标记但不是方法句柄。那么我们可以从调试器获得真实的MethodInfo对象(可以让我得到句柄)的debugee函数吗?换句话说,是否可以从调试器对debugee进行反思?
答案 0 :(得分:3)
不完全是。
您可以使用IMetadataImport et. al.获取静态信息,并且可以通过ICorDebug api直接获取某些动态信息,但是需要在调试对象上运行任何其他类型的反射(通常使用ICorDebugeEval。
如果您不介意使用ICorDebugEval在调试对象上执行反射,则可以使用以下序列。
根据您的使用情况,将最后3个步骤与对PrepareMethod的调用组合成一个辅助方法可能是有益的,该方法位于您具有调试负载的单独程序集中。