2011-11-17 124 views
17

在我的C#對象中,我使用此屬性的setter中的條件value == "Status"設置了條件斷點。通常它用PostSharp方面進行了裝飾,但在這種情況下我已經評論說,它仍然有問題。爲什麼Visual Studio無法在這個簡單的C#屬性上設置條件斷點?

public virtual string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     _name = value; // breakpoint here 
    } 
} 

第一次執行到斷點,VS顯示錯誤:

Visual Studio MessageBox

編輯 - 爲可搜索的消息是這樣的:

The following breakpoint cannot be set:

At (file).cs, line 137 character 17 ('(class).Name', line 12), when 'value == "Status"' is true

The function evaluation requires all threads to run.

下面介紹一下主題窗戶看起來像:

Debugger Threads window

任何人都看過這個,或者有什麼想法可能導致調試器在這個看似簡單的情況下阻止?可能它與睡眠線有關?

+1

此鏈接可能是有用的:http://msdn.microsoft.com/en-us/library/z4ecfxd9.aspx,HTTP://blogs.msdn。 com/b/greggm/archive/2005/11/18/494648.aspx –

+0

在我設計一個解決方法的努力中,我發現它至少有時可能只是禁用斷點,運行('F5')並立即重新啓用斷點。我猜測這個線程信息並不是我原先假設的那條紅色鯡魚,儘管實際的原因仍然沒有我...... 當然,調試器需要除當前線程以外的任何線程一個爲了評估參數值而活躍,對我來說同樣沒有意義。也就是說,我從來沒有寫過一個調試器:) –

+0

@PetrAbdulin好的鏈接,但我仍然在爲什麼評價'價值'(這是一個參數,我當然希望不是一個函數)並將其等同於字符串文字將做任何需要另一個線程的東西 –

回答

1

我終於想出了一個解決辦法:

public virtual string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     if (value == "Status") 
      DoSomeNoOp(); // Breakpoint here, or Debug.Fail() inside your no-op 

     _name = value; 
    } 
} 
1

當我遇到基線程執行結束時遇到過這種情況時,我曾經遇到過這個問題。有關應用程序流的更多信息將有所幫助。在我看來,這似乎是一種競爭條件。

0

我不認爲它知道value是什麼。嘗試在關閉}上放置斷點,並在該條件下使用_name

+0

'價值'不是問題;我在其他條件下使用了該符號,並且它工作正常。 –

相關問題