2012-03-15 92 views
19

在调试/逐步检查代码时,我尝试检查手表中的变量,结果发现每个内部变量说明函数评估均超时。在调试/步进检查变量时,功能评估超时

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

这是在VS2010 Premium内。

回答

18

此问题最可能的原因是对CLR评估线程导致问题的属性或ToString方法的隐式评估。验证此关闭隐式评估。

  • 工具 - >选项
  • 调试
  • 取消选中“启用财产评估和其他隐函数调用”

然后,重新启动您的方案,看看它是否工作。

+0

原来,这对我来说是一个递归调用。在属性get()方法中,我返回公共属性而不是私人支持字段。哎呀。 – Induster 2013-05-01 21:51:41

3

Visual Studio执行属性获取器来获取它的值,如果它花了很长时间,或者因为它做了一些昂贵的事情,你会得到这个错误。考虑:

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方法return语句一个破发点,调试器将无法评估栏属性,因为这样做需要它获得锁的对象,但它不会是能够这样做是因为程序会在断点处于活动状态时永久保存该锁