2011-06-13 13 views
19

Durante il debug del mio C#, desidero spesso conoscere quando il valore di una variabile cambia e quindi esaminare lo stato del programma.Come si esegue "fino a quando questa variabile non cambia" durante il debug?

Attualmente, lo faccio in questo modo:

  1. Incagli la variabile incriminato.
  2. Spam fisicamente F10 (collegamento per Passaggio) finché non vedo il cambiamento di valore.

Tuttavia, il numero di F10 richiesti è fastidioso.

Sicuramente questo è stato automatizzato, ho pensato. Ma non riesco a trovare questa funzionalità nel mio Microsoft Visual C# Express, che mi sorprende. Dopo tutto, la Watch-list fa evidenzia automaticamente i valori modificati in rosso acceso.

mi sto perdendo qualcosa?

+0

per quanto ne so solo la loro debugger nativo supporta questa. –

risposta

19

trucco semplice per l'Express edition:

private string myValue; 
public string MyValue 
{ 
    set 
    { 
    if (this.myValue != value) Debugger.Break(); 
    this.myValue = value; 
    } 
} 
+1

Al momento, parti del mio codice cambiano deliberatamente la variabile direttamente - senza passare attraverso il setter. Inoltre, il setter fa già molte cose oltre a impostare il valore. Se facessi setter separati per l'accesso "setter-direct" e tramite setter, il campo sarebbe comunque direttamente accessibile dalla classe. – Anko

+1

Ma sì, è un work-around completamente funzionale! – Anko

6

Conditional breakpoints sono ciò che stai cercando, ma sembra che non siano disponibili in Visual Studio Express.

In Visual Studio (non-Express), il modo in cui funziona è creare un punto di interruzione condizionale con un'espressione uguale al valore dell'orologio e "È cambiato" come condizione di punto di interruzione.

+19

Non proprio. Presumo che l'OP voglia una sorta di _data breakpoint_, che viene attivato ogni volta che qualcosa tocca la posizione di memoria data. Questo tipo di punti di interruzione non sono disponibili in Visual Studio. Al contrario, il breakpoint condizionale viene attivato se i dati vengono modificati e il codice è in qualche posizione predefinita. – Vlad

0

Ecco come lo faccio in Visual Studio. Impostare un punto di interruzione premendo F9 o facendo clic sul margine sinistro. Quindi fare clic con il pulsante destro del mouse sul punto rosso visualizzato e selezionare il comando Condizione. Ci sono anche altre opzioni lì.

Tuttavia, questo potrebbe non essere supportato in Visual Studio Express.

0

è possibile utilizzare i punti di interruzione condizionali

vedere this

0

Si potrebbe scrivere un'istruzione if che verifica la presenza di un cambiamento e hanno un punto di rottura accadere entro tale if, quindi si rompe inizialmente, quindi si sceglie curriculum , continua fino a quando non raggiunge questo punto di rottura.

+0

Questo non funzionerà perché il mio codice è grande e la variabile in questione può essere cambiata in molti posti. (Dovrei scrivere mille dichiarazioni if). – Anko

0

Usa Debugger.Break sulla base di alcune condizioni di esecuzione, o andare rightclick su qualche punto di interruzione e scegliere pausa condizionale -> è cambiato

Edit: dunno su questo in veloce

+0

No, il menu del tasto destro non ha questa opzione in Express. – Anko

0
  1. Impostare il punto di interruzione in cui si desidera il codice per mettere in pausa
  2. Aprire la finestra Punti di interruzione (Debug -> Windows -> punti di interruzione)
  3. destro del mouse sul punto di interruzione e selezionare Condizione ...
  4. impostare la condizione di essere il nome della variabile, e selezionare il pulsante di opzione è cambiato.
  5. Fare clic su OK, e quindi eseguire il debug come al solito :)
0

Se si desidera catturare il cambiamento variabile ad un certo punto di interruzione, al contrario di cattura esattamente dove è stato cambiato, quindi impostare il punto di interruzione, fare clic su di esso e scegli "Condizione". Supponiamo che il nome della variabile sia X e che sia il valore corrente sia A. Immettere "X! = A" nel campo delle condizioni.

Ora il punto di interruzione saranno colpiti solo dopo x passa a un valore diverso da A.

Problemi correlati