2010-02-22 48 views
3

當操作由Visual Studio調試器引起時,有沒有辦法讓斷點命中? 例如,假設我有以下的(我知道你不應該這樣做,只是使用它的參數的緣故):由調試器引起的命中斷點

public class Test 
{ 
    int _X = -1; 
    public int X { 
     get { return ++_X; } //Breakpoint here 
     set { _X = value; } 
    } 
} 

和:

static void Main(string[] args) 
{ 

     Test t = new Test(); 
     t.X = 1; //Breakpoint here 
     return; 
} 

如果暫停在斷點處在Main中,每次將鼠標指針懸停在「tX」 (假設您已啓用以下調試選項 - 「啓用屬性評估和其他隱式函數調用」),或者您在「監視」窗口中評估屬性 - 它會增加屬性,但屬性的「get」訪問器中的斷點不會被觸發。在更具體的上下文中重新提出問題 - 在調試器完成評估時,有沒有辦法在屬性的「獲取」訪問器中創建斷點?

回答

2

經過對這個主題的一些研究,我瞭解了FuncEval,並且在閱讀了很多關於FuncEval的內容之後,我被帶到了SteveJS先生的以下文章: Stop Mid Func Eval, Nested Break States。 在文章中他解釋說,從VS2005開始,如果評估是從「Immidiate Window」而不是Watch或「Quick Watch」窗口完成的,您可能會遇到由FuncEval引起的斷點。因此,在上面的示例中,在立即窗口中輸入

?t.X 

導致get訪問器上的斷點被命中。

+0

+1。一個非常好的信息 – 2010-02-25 16:22:10

0

取消選中此選項

調試 - >一般 - >步驟在屬性和操作

看看這個帖子以及

+0

@Asad - 我看不到那個選項;我確實看到「跨越屬性和操作符(僅限管理)」,但是我理解這樣做是正確的:只能跨越不是所需結果的屬性?當調試器評估屬性並改變它的值時,我不會「踩」。如果我誤解了你想說的話,請原諒我。 – dugas 2010-02-22 03:13:09

+0

哦,對不起,你需要「取消」這個選項。調試器然後將步入屬性。已修改回答。 – 2010-02-22 03:14:48

+0

我在發佈問題時未選中該選項。我不想一步,我想要在財產的get accessor中找到一個斷點。感謝您的輸入。 – dugas 2010-02-22 03:24:42