调试/步进时检查变量时函数评估超时

28
在调试/逐行调试代码时,如果我尝试检查看一下变量,那么每个内部变量都会出现错误,指出函数评估超时。
有人知道这是为什么以及如何避免吗?由于这影响了我调试代码的能力。
这是在VS2010 Premium中的情况。
2个回答

22
这个问题最可能的原因是隐式地评估属性或 ToString 方法引起 CLR 评估线程出现问题。要验证这一点,请关闭隐式评估。
  • 工具 -> 选项
  • 调试
  • 取消选中"启用属性评估和其他隐式函数调用"
然后重新启动您的场景,看看是否有效。

这对我来说变成了一个递归调用。在一个属性的 get() 方法中,我返回的是公共属性而不是私有后备字段。哎呀。 - Induster
7
如果我禁用该选项,在 QuickWatch 中检查对象时会出现“用户关闭了隐式函数评估”错误。 - AlexVPerl
和AlexVPerl一样。 - Brian
与上面的人一样。这个解决方案禁用了评估,而不是解决问题。 - pawellipowczan

5

Visual Studio执行属性getter以获取其值,如果它需要很长时间,可能是因为它正在执行一些昂贵的操作,您会收到此错误。请考虑:

public class foo
{
    private object lockObject = new object();
    public int bar
    {
        get
        {
             lock(lockObject){
                return 42;
             }
         }
     }
     public int aMethod()
     {
         lock(lockObject)
         {
             var a = this.bar;
             return a*2;   //insert a break point here
          }
      }
}

如果在aMethod的返回语句上添加断点,调试器将无法评估bar属性,因为这需要获取锁对象,但是由于程序在断点处一直持有该锁,因此无法获取锁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接