为什么Visual Studio不允许我进入Type.GetType()?

Mar*_*ark 9 .net debugging visual-studio

我有以下简单的代码:

class Program
{
    static void Main(string[] args)
    {
        var t = Type.GetType("System.Reflection.Assembly");

        Console.WriteLine(t.FullName);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试调试Type.GetType()方法,但即使使用"Step Into",调试器也会跳过该方法.我已经为.NET Framework类启用了调试,并且对其他框架方法的调试工作正常.为什么调试器不允许我进入这个特定的方法?

Han*_*ant 8

因为Type.GetType()内联到此:

[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
public extern Type GetType();
Run Code Online (Sandbox Code Playgroud)

换句话说,该方法在CLR内部用C++实现.InternalCall属性值是键.参考源不提供CLR的源代码.你可以使用SSCLI20源代码作为参考,它是一个非常好的匹配CLR源,但你不能相信它是完全准确的,它不再维护.clr/src/vm/ecall.cpp源代码文件包含从InternalCall名称到C++函数名称的映射.