2011-06-13 9 views
19

Al depurar mi C#, a menudo quiero saber cuando el valor de una variable cambia y luego investigo el estado del programa.¿Cómo puedo "ejecutar hasta que esta variable cambie" al depurar?

Actualmente, lo hago de esta manera:

  1. lista de vigilancia la variable infractor.
  2. Físicamente correo no deseado F10 (atajo de paso) hasta que vea el cambio de valor.

Sin embargo, el número de F10 necesarios es molesto.

Seguramente esto se ha automatizado, pensé. Pero no puedo encontrar esta característica en mi Microsoft Visual C# Express, lo que me sorprende. Después de todo, la lista de vigilancia hace resaltar automáticamente los valores modificados en rojo brillante.

¿Echo de menos algo?

+0

yo sepa sólo su depurador nativo apoya esto. –

Respuesta

19

truco simple para la edición Express:

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

Por el momento, partes de mi código cambian deliberadamente la variable directamente, sin pasar por el setter. Además, el colocador ya hace muchas cosas además de establecer el valor. Si establecí instaladores separados para el acceso "setter-direct" y set-setter, el campo aún sería directamente accesible desde la clase. – Anko

+1

¡Pero sí, ES una solución completamente funcional! – Anko

6

Conditional breakpoints son lo que buscas, pero parece que no están disponibles en Visual Studio Express.

En Visual Studio (no Express), la forma en que funciona es que crea un punto de interrupción condicional con una expresión igual al valor de su reloj y "Ha cambiado" como condición de punto de interrupción.

+19

No realmente. Supongo que el OP quiere una especie de _data breakpoint_, que se activa cada vez que algo toca la ubicación de memoria dada. Tales tipos de puntos de interrupción son AFAIK no disponible en Visual Studio. Por el contrario, el punto de interrupción condicional se activa si los datos se cambian y el código está en alguna ubicación predefinida. – Vlad

0

Así es como lo hago en Visual Studio. Establezca un punto de interrupción presionando F9 o haciendo clic en el margen izquierdo. A continuación, haga clic derecho sobre el punto rojo que aparece y seleccione el comando Condición. También hay otras opciones allí.

Sin embargo, esto puede no ser compatible con Visual Studio Express.

0

puede utilizar puntos de interrupción condicionales

ver this

0

Se podría escribir una sentencia if que comprueba para un cambio y tener un punto de ruptura suceda dentro de esa sentencia if, por lo tanto se rompe inicialmente, a continuación, hacer clic en hoja de vida , continúa hasta que llega a este punto de quiebre.

+0

Esto no funcionará para mí ya que mi código es grande y la variable en cuestión se puede cambiar en muchos lugares. (Tendría que escribir mil declaraciones if.) – Anko

0

Uso Debugger.Break basado en alguna condición de ejecución, o ir botón derecho del ratón en algún punto de interrupción y elija salto condicional -> ha cambiado

Editar: dunno acerca esta in exprés

+0

No, el menú contextual no tiene esa opción en Express. – Anko

0
  1. Establecer el punto de interrupción en la que desea el código para hacer una pausa
  2. Abra la ventana Puntos de interrupción (Depurar -> Windows -> Puntos de interrupción)
  3. Haga clic con el botón derecho en su punto de interrupción y seleccione Condición ...
  4. Establezca la condición para que sea el nombre de la variable y seleccione el botón de opción Ha modificado.
  5. Haga clic en Aceptar y, a continuación, depurar con normalidad :)
0

Si se desea capturar cambio de variable en algún punto de interrupción, en contraposición a la captura exactamente donde se cambió, a continuación, establezca el punto de interrupción, haga clic en él y elige "Condición". Digamos que su nombre de variable es X y es el valor actual es A. Ingrese "X! = A" en el campo de condición.

Ahora el punto de interrupción sólo se golpeó después de X cambia a un valor distinto a A.

Cuestiones relacionadas