在调试/单步调试中检查变量时,函数评估超时

Gur*_*epS 24 .net c# visual-studio-2010

在调试/单步执行代码时,我尝试检查监视中的变量,每次内部变量说明函数评估超时都会出错.

有谁知道这是为什么以及如何避免它?因为它影响了我调试代码的能力.

这是在VS2010 Premium内.

Jar*_*Par 21

导致此问题的最可能原因是对属性或ToString方法的隐式评估导致CLR评估线程出现问题.要验证此操作,请关闭隐式评估.

  • 工具 - >选项
  • 调试
  • 取消选中"启用属性评估和其他隐式函数调用"

然后重新启动您的方案,看看它是否有效.

  • 如果禁用该选项,在 QuickWatch 中检查对象时会收到“用户关闭隐式函数评估”错误。 (8认同)

Yau*_*aur 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
          }
      }
}
Run Code Online (Sandbox Code Playgroud)

如果在aMethod中的return语句中添加断点,则调试器将无法评估bar属性,因为这样做需要它获取锁定对象,但由于程序将保留,因此无法执行此操作在断点处于活动状态时永远锁定