2011-01-13 24 views

Respuesta

5

No. Pero puede tener puntos de interrupción condicionales. Supongo que golpear el otro punto de quiebre indica algún cambio de estado.

Así, Right click the breakpoint -> Breakpoint properties -> check "conditional"

0

Si conoce la condición en la que se dio en el otro punto de ruptura, a continuación, puede añadir esa condición al nuevo punto de interrupción.

0

Los puntos de interrupción condicional son una posibilidad, y también puede establecer un recuento de golpes para que el punto de interrupción solo se active después de haber alcanzado el número de veces especificado.

Pero no, no hay forma de hacer lo que está pidiendo.

0

Otra idea es deshabilitar su punto de interrupción y habilitarlo una vez que se golpea el otro punto de interrupción.

+0

Sí, eso es lo que hago ahora, pero es un dolor seguir haciéndolo. – Kyle

6

Este es un gran truco, pero es una solución funcional:

llamada la 'disparador' punto de interrupción 1 y la ubicación de destino de punto de interrupción 2. Queremos punto de ruptura 2 para disparar si y sólo si la ejecución, ha pasado el punto de interrupción 1.

Establezca puntos de interrupción condicionales en cada uno.

Para el punto de interrupción 1, configure la condición como System.setProperty("breaknow", "breaknow") == "". Esta condición nunca será cierta, pero configurará una propiedad del sistema que podemos leer en el punto de interrupción 2.

Para el punto de interrupción 2, configure la condición como System.clearProperty("breaknow") != null. Esta condición se activará cuando se establezca la propiedad del sistema, y ​​también se borrará (para que podamos repetirla si es necesario).

Como dije, es un truco, pero parece funcionar. Envié una solicitud de mejora de Eclipse para implementar enlaces o encadenar puntos de interrupción como una característica nativa (https://bugs.eclipse.org/bugs/show_bug.cgi?id=390590). Desafortunadamente, no tengo ancho de banda para implementarlo yo mismo, pero tal vez obtengamos soporte para una solución más limpia algún día.

Una advertencia (que se aplica a todos los puntos de interrupción condicionales, no solo a este truco): según mi experiencia, parece que establecer un punto de interrupción condicional impide que el JIT compile el método de interés, ejecutándolo en modo interpretado. O tal vez, ¿permite la primera etapa C1 JIT pero evita que el compilador C2 de segunda etapa optimice?

En cualquier caso, debe tener en cuenta que el método que está depurando se ejecutará considerablemente más lento con un punto de interrupción condicional en su lugar. Esto no suele ser un problema, pero al depurar bucles internos muy ajustados, me pareció mejor recurrir al método (descuidado) if (x) { // Do somthing useless and set a breakpoint here}.

Cuestiones relacionadas