2010-11-03 29 views
40

al desarrollar C++ con VS tiene esta increíble característica de puntos de interrupción de datos, que se activan cuando los datos en una determinada dirección en la memoria cambian.puntos de interrupción de datos en java/eclipse

¿hay alguna característica similar al desarrollar java en eclipse?

gracias!

editar: sobre la función "suspender cuando el valor cambia": tengo la impresión de que la ejecución aún debe alcanzar la línea donde se encuentra el punto de interrupción. Lo que quiero es que se active en cualquier lugar tan pronto como cambie el valor.

Respuesta

59

Se puede establecer un punto de observación en un campo, coloque el cursor en la línea en la que se declara el campo y seleccione el menú Run -> Toggle Watchpoint
o simplemente establecer un punto de interrupción haciendo doble clic en el margen izquierdo en esa línea.

Puede cambiar las propiedades del punto de observación como suspend on field access o suspend on field modification después de agregarlo. Simplemente haga clic en el punto de observación en el margen izquierdo y seleccione Breakpoint Properties...

Buscar la ayuda para el punto de observación para obtener más información:

Un punto de observación es un punto de interrupción especial que detiene la ejecución de una aplicación siempre que el valor de una expresión dada cambia, sin especificar dónde podría ocurrir. ...

+0

¡perfecto! exactamente lo que necesitaba! – clamp

+3

Esto es útil (e I + 1), pero todavía no es la respuesta a la pregunta. Esta interrupción en * cualquier * instancia de esa declaración, no en una instancia específica. –

+0

Solo tengo la opción de punto de observación disponible cuando el campo no es definitivo. ¿Cómo puedo ver el acceso a un objeto final? (Quiero ver cada vez que se agrega o recupera un elemento de un mapa.) – dj18

1

Lo más parecido sería editar las propiedades del punto de interrupción. Puede agregar condiciones para verificar valores distintos. Otra forma podría ser agregar un punto de interrupción al método setter.

Puede establecer las propiedades del punto de interrupción haciendo clic con el botón derecho en un punto de interrupción ya establecido en la vista de punto de interrupción.

3

En propiedades de punto de interrupción, tiene la opción de hacerlo condicional y de marcar el botón de opción "Suspender cuando el valor cambie".

+0

gracias, pero ¿cómo exactamente proporciono el objeto o una variable a ese objeto que quiero monitorear? – clamp

+0

Usted ingresa eso en el campo a continuación. Por supuesto, eso no es lo mismo que interrumpir cada vez que esa variable cambia, pero si hay un cuello de botella en el que tu programa pasa a menudo, puedes colocar un punto de quiebre allí y en teoría romper solo cuando un cierto valor cambie. – Neil

3

Haga clic derecho en el punto de interrupción y seleccione Breakpoint properties.

En la pantalla inicial, elija: Conditional -> Suspend when value changes

+0

gracias, pero ¿cómo exactamente proporciono el objeto o una variable a ese objeto que quiero monitorear? – clamp

+0

en el campo debajo del botón de opción, ingrese el nombre de la variable (algo como this.foo). Hay autocompletado disponible. –

1

Por lo que yo sé, no existe tal función genérica en Eclipse. Sin embargo, puede dar algunas condiciones a un punto de interrupción existente:

Agregue un punto de interrupción en algún lugar de su código. Luego, en la vista "Punto de inflexión", haz clic con el botón derecho sobre ella y luego elige "Propiedades del punto de interrupción". En el panel, puede agregar una condición que debe verificarse para que la aplicación se detenga en este punto de interrupción (por ejemplo, if (foo > 0)).

Esto no es exactamente lo que quiere, pero no creo que Eclipse proporcione dicha característica.

6

Uso de la Vista de variables:

  • Haga clic derecho en el campo y seleccione "Activar Watchpoint", y luego
  • Haga clic derecho en la misma instancia de nuevo y seleccione "puntos de ruptura de Instancia ... "que le permite restringir un punto de interrupción específico a una instancia determinada.

Tenga en cuenta que el rendimiento probablemente no es tan bueno como con un punto de corte de hardware de memoria (como en VC++, por ejemplo).

Cuestiones relacionadas