在调试(大部分)用 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(..) 方法,除非在方法体中设置了断点。
所以我的问题是是否有禁用/修改此类行为的选项。设置(和删除)断点以强制调试器进入方法体真的很烦人。
谢谢! 迪尼尼
最佳答案
使用“step into”(F11) 而不是“step over”(F10)。我测试了您的代码,它正确地进入了 printOutImpl(B bObj)
和 Console.WriteLine("B")
;
关于c# - 使用动态关键字时的调试问题(VS2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441537/