2011-08-25 60 views
6

比方說,我有這個屬性如何調試Visual Studio 2010中的屬性集?

public ISetting Setting { get; set; } 

我怎樣才能在設定斷點弄?這樣當有些東西正在設置一個值時,程序會暫停。

我儘量做到這樣

public IDatabaseConnectionSetting ConnectionSetting { 
    get; 
    set; 
} 

並把斷點上線,但它仍然無法正常工作。紅色斷點熒光筆突出顯示整個財產聲明

回答

5

使用完整屬性而不是自動屬性。

快捷是propfull

private ISetting setting; 

public ISetting Setting 
{ 
    get 
    { 
     return setting; 
    } 
    set 
    { 
     setting = value; 
    } 
} 

要使用代碼片斷快捷方式,類型propfull然後按TAB兩次。

+0

我覺得很奇怪,如果我有我的代碼更改爲全屬性只是爲了調試它 –

+1

@Louis是的,我同意和希望有人會用我不知道存在的新技術來回答。但是我知道很多像'var result = blah.Evaluate;返回結果;'專門讓他們可以在返回行上放置一個斷點並檢查返回的內容。這是同樣的事情。 –

+0

好的。只是好奇,你是什麼意思按兩次標籤?通常我輸入它,標籤,類型,標籤,類型。 –

2

不,你不能。自動屬性像帶有後備存儲的屬性一樣編譯。我認爲沒有理由讓它們出現斷點,因爲你必須把它們分配給他們,在那裏檢查你的財產。

private bool TestProperty { get; set; } 

編譯像

[CompilerGenerated] 
private bool <TestProperty>k__BackingField; 
[CompilerGenerated] 
private void set_TestProperty(bool value) 
{ 
    this.<TestProperty>k__BackingField = value; 
} 
[CompilerGenerated] 
private bool get_TestProperty() 
{ 
    return this.<TestProperty>k__BackingField; 
} 
+4

它可以在任何地方設置 - 在每個調用setter的地方打破setter更有用。 –

+0

同意以上 –

+0

我同意。這應該是VS的特點。請問在什麼情況下,您需要從多個地方撥打電話?只是好奇,謝謝。 –

7

有一個更好的解決方案在這裏:Can't set breakpoints on an auto-property setter ? Why?

使用Visual Studio 2008,2010,2012:

  1. 轉到斷點窗口
  2. 新建 - >歇在功能...
  3. 對於GET,類型:ClassName.get_CurrentFramesize()

    對於集類型:ClassName.set_CurrentFramesize(INT)

你會得到一個「沒有來源可用」的斷點時,但你會得到調用>位置在調用堆棧。

我發現這個解決方案在這裏:http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/b1dd0dc3-e9c1-402a-9c79-a5abf7f7286a

參見:Debugging automatic properties