2012-03-15 89 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語句一個破發點,調試器將無法評估欄屬性,因爲這樣做需要它獲得鎖的對象,但它不會是能夠這樣做是因爲程序會在斷點處於活動狀態時永久保存該鎖