使用动态关键字时的调试问题(VS2010)

时间:2013-05-08 13:06:15

标签: c# debugging dynamic-keyword

在调试用C#编写的编译器(主要是)时,我注意到以下问题,我试图将其映射到简化的代码片段:

public class Program
{
    public abstract class Base
    {
        public abstract void foo();
    }

    public class A : Base
    {
        public override void foo()
        {
            Console.WriteLine("A");
        }
    }

    public class B : Base
    {
        public override void foo()
        {
            Console.WriteLine("B");
        }
    }

    public static void printOut(Base obj)
    {
        printOutImpl((dynamic)obj);
    }

    public static void printOutImpl(A aObj)
    {
        aObj.foo();
    }

    public static void printOutImpl(B bObj)
    {
        bObj.foo();
    }

    public static int Main(string[] args)
    {
        B bObj = new B();

        printOut(bObj);

        return 0;
    }
}

基本上,printOut(..)有两种实现方式。 dynamic关键字用于确定运行时的相应实现。当我调试并尝试单步执行代码时,调试器将不会输入相应的printOutImpl(..)方法,除非在方法体中设置了断点。

所以我的问题是是否有禁用/修改此类行为的选项。设置(和删除)断点以强制调试器进入方法体是非常烦人的。

谢谢! dinony

1 个答案:

答案 0 :(得分:1)

使用“步入”(F11)而不是“跳过”(F10)。我测试了您的代码,并正确地进入了printOutImpl(B bObj)Console.WriteLine("B");