我有以下简单的代码:
class Program
{
static void Main(string[] args)
{
var t = Type.GetType("System.Reflection.Assembly");
Console.WriteLine(t.FullName);
}
}
我正在尝试调试Type.GetType()
方法,但即使使用“Step Into”,调试器也会跳过该方法。我已经为.NET Framework类启用了调试,并且对其他框架方法的调试工作正常。为什么调试器不允许我进入这个特定的方法呢?
答案 0 :(得分:8)
因为Type.GetType()内联到此:
[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
public extern Type GetType();
换句话说,该方法是在CLR内部的C ++中实现的。 InternalCall属性值是键。参考源不提供CLR的源代码。您可以使用SSCLI20 source code作为参考,它与CLR源非常匹配,但您不能相信它完全准确,不再维护它。 clr / src / vm / ecall.cpp源代码文件包含从InternalCall名称到C ++函数名称的映射。