2009-11-10 7 views
22

Estoy depurando algún código heredado donde tenemos un objeto almacenado en caché que parece haber cambiado externamente.¿Hay alguna manera en el depurador de Eclipse de ser notificado cuando cambia el estado de un objeto de Java?

Si conozco el identificador de objeto (durante la depuración), ¿hay alguna manera de "verlo" para que si algún otro código en el mismo subproceso u otro subproceso intente modificar su estado desencadene mi depuración? ?

No puedo usar solo un reloj de expresión porque puede haber referencias a ese objeto en otro lugar y porque hay muchas instancias de la misma clase.

+0

¿Puede simplemente establecer puntos de interrupción en cada uno de sus métodos? ¿Hay demasiados? –

+0

por supuesto poner un punto de interrupción condicional en cada uno de los métodos de la clase del objeto que podría modificar el estado del objeto. La expresión condicional que se rompe solo de 'esto' es el identificador del objeto. –

+0

Las propiedades se manipulan directamente (NO HE ESCRITO este código ...) – Uri

Respuesta

17

Establezca un punto de interrupción en el código que desea detener cuando el valor cambie.

  • Comience en la vista de punto de interrupción.
  • Seleccione el punto de interrupción
  • haga clic derecho y Goto las "propiedades de punto de interrupción"
  • de verificación 'Activar Condición' caja
  • en el campo de texto introduzca el nombre de la variable para ver
  • seleccione la ' valor de la condición cambia 'botón de radio
+0

No entiendo "quieres parar cuando el valor cambie". Entonces, ¿puede poner un punto de interrupción en cualquier lugar (incluso en código muerto), y cuando el valor cambie, se detendrá en este punto? ¿No podemos decir que eclipse "hacer un punto de interrupción y detener cuando el valor cambia"? – lmo

14

Si se declara en alguna parte como una clase o variable de instancia (debería ser, ¿de qué otra manera podría hacerlo caché), entonces también puede establecer un punto de interrupción en la línea en particular. Se llamará watchpoint y se activará por defecto en acceso y modificación (configurable a través de propiedades de punto de interrupción).

+0

No es un cambio de variable, sino una modificación del estado de un objeto que debe vigilarse. –

+0

Luego configure los puntos de interrupción en las propiedades del objeto. – BalusC

+0

@BallusC: Si quien escribió este código realmente usara getters y setters :) – Uri

Cuestiones relacionadas