2011-08-25 10 views
6

Diciamo che ho questo immobileCome eseguire il debug sul set di una proprietà in Visual Studio 2010?

public ISetting Setting { get; set; } 

Come posso ottenere breakpoint sul set? In modo che il programma si interrompa quando qualcosa sta impostando un valore.

Io cerco di fare in questo modo

public IDatabaseConnectionSetting ConnectionSetting { 
    get; 
    set; 
} 

E mettere il punto di interruzione sulla linea , ma ancora non funziona. L'evidenziatore punto rosso evidenzia l'intera dichiarazione di proprietà

risposta

5

Utilizzare una proprietà completa anziché autoproperty.

Il collegamento è propfull

private ISetting setting; 

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

Per utilizzare il collegamento codice-frammento, tipo propfull quindi premere TAB due volte.

+0

Trovo strano se devo cambiare il mio codice di piena proprietà solo per eseguire il debug –

+1

@Louis Sì, sono d'accordo e spero che qualcuno risponda con una nuova tecnica che non sapevo esistesse. Ma conosco un sacco di sviluppatori che codificano come 'var result = blah.Evaluate; restituire il risultato; 'specificatamente in modo che possano inserire un punto di interruzione sulla linea di ritorno e ispezionare cosa viene restituito. È lo stesso tipo di cosa. –

+0

Ok. Solo curioso, cosa intendi per scheda due volte? di solito lo digito, tab, digita, tab, digita. –

2

No, non è possibile. Le proprietà automatiche sono compilate come quella con il backing store. Penso che non vi sia alcun motivo per consentire i punti di interruzione su di loro, perché da qualche parte devi assegnarli, controlla la tua proprietà lì.

private bool TestProperty { get; set; } 

è compilato come

[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

poteva essere impostato in un numero qualsiasi di posti - molto più utile per rompere all'interno del setter di ogni posto che chiama il setter. –

+0

d'accordo con il precedente –

+0

Sono d'accordo. Che dovrebbe essere caratteristica di VS. Posso chiederti qual è il tuo caso d'uso quando hai bisogno di call setters da molti posti? Solo curioso, grazie. –

7

C'è una soluzione migliore qui: Can't set breakpoints on an auto-property setter ? Why?

utilizzando Visual Studio 2008, 2010, 2012:

  1. Vai alla finestra Breakpoint
  2. Nuovo-> Interruzione in funzione ...
  3. Per get, tipo: ClassName.get_CurrentFramesize()

    Per il set, tipo: ClassName.set_CurrentFramesize (int)

Otterrete una "Nessuna fonte disponibile" quando viene colpito il punto di interruzione, ma si otterrà la chiamata> posizione nello stack di chiamate.

ho trovato questa soluzione qui: http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/b1dd0dc3-e9c1-402a-9c79-a5abf7f7286a

Vedi anche: Debugging automatic properties

Problemi correlati