Eclipse: el depurador no se detiene en el punto de interrupción

96

Estoy intentando solucionar problemas con un JUnit. En el código fuente, establecí un punto de interrupción en dos lugares: 1) en una línea donde se inicializa un miembro estático 2) la primera línea de uno de los casos de prueba.

El depurador se detiene en la línea de inicialización del campo estático. Pero no se detiene en el caso de prueba. No importa dónde establezca el punto de interrupción en el caso de prueba, el depurador no se detiene allí. Sé con certeza que el caso de prueba se ejecuta, ya que puedo ver que los mensajes de registro que he agregado aparecen en el registro.

Cualquier ayuda será muy apreciada.

Estoy usando el lanzador Eclipse Galileo y JUnit4.

Roy
fuente
1
¿Su código está compilado con la opción -g activada para generar la información de depuración en el archivo .class? Eso es obligatorio, por supuesto.
duffymo
Sí, está compilado con la opción -g.
Roy
¿También puede agregar información sobre qué versión de JUnit y JRE está utilizando? Creo que es útil en este contexto.
Vineet Reynolds
Por cierto, el JDK en uso es más importante (hay algunos JDK en mal estado que podrían causar esto). Ignore la consulta sobre la versión de JUnit.
Vineet Reynolds
Lo siento, debería haber incluido eso. Actualización JDK 1.6 14.
Roy

Respuestas:

39

Esto podría estar relacionado con uno de los errores en la actualización 14 de JDK 6, como se indica en las notas de la versión de la actualización 15 de JDK 6 .

Si este resulta ser el problema, debería pasar a una versión superior del JDK (aunque eso no es garantía, ya que se han publicado correcciones contra 6u16, 6u18 y 7b1 ). La mejor opción es usar la bandera -XX: + UseParallelGC. Aumentar el tamaño del tamaño de pila mínimo y máximo, para retrasar el primer GC, trae alivio temporal.

Por cierto, use este informe de error en Eclipse para rastrear cómo les ha ido a otros.

Vineet Reynolds
fuente
1
Actualicé a JDK 1.6 actualización 16. Ahora se detiene en todos los puntos de interrupción que he establecido. Muchas gracias por tu ayuda.
Roy
De nada. u16 parece ser la versión en la que esto se solucionó en buena medida, a pesar de las notas de la versión de u15.
Vineet Reynolds
Gracias @Vineet - Me estaba tirando de los pelos con este :-)
Jim Garrison
@VineetReynolds: He visto sus valiosas respuestas relacionadas con Jboss y Java ee 6. ¿pueden ayudarme a solucionar este problema? stackoverflow.com/questions/28954323/…
tormenta
96

La solución podría ser tan simple como hacer clic en ejecutar / omitir todos los puntos de interrupción. Trabajó para mi.

usuario1164035
fuente
3
Me tomó tres días darme cuenta de que de alguna manera había hecho clic en eso
Henry
1
Gracias ... debe haber hecho clic en el icono de la barra de herramientas por accidente de alguna manera
:-P
4
Gracias ... no tengo idea de cuándo se hizo clic en
eso
1
Muchas gracias. Para otros usuarios, en esta situación, si crea un punto de interrupción, aparecerá con una barra.
saurabheights
Lo mismo me pasó a mí. ¡¡Nunca hice clic en él ... !! Versión: Mars Release (4.5.0) Id. De compilación: 20150621-1200
Beezer
52

Asegúrese de que, en Ejecutar> Configuraciones de depuración, esté seleccionado 'Detener en principal', si corresponde a su situación.

Fiador
fuente
1
Asegúrese de leer las respuestas anteriores antes de publicar. El problema era su versión jvm ... y se resolvió hace tres años. Es mejor no revivir los hilos viejos a menos que su respuesta contribuya con algo significativo, que no fue cubierto en respuestas anteriores.
Leigh
6
Gracias. @Responder tu respuesta resolvió mi problema. Es extraño que "Stop in main" no esté configurado.
Yu Shen
25
Parece que su respuesta contribuyó con algo significativo que aún no estaba cubierto en respuestas anteriores :)
scubbo
Tenga en cuenta que esta es una opción para aplicaciones Java pero no para aplicaciones de Android.
Noumenon
21

Por lo general, cuando esto me sucede (raro, pero sucede) significa que el código que se está ejecutando es diferente al código en el editor. Ocasionalmente sucederá para Eclipse que las clases construidas y el código en el editor no estén sincronizados. Cuando eso sucede, obtengo todo tipo de comportamiento de depurador extraño (depurar líneas vacías, omitir líneas de códigos, etc.).

Reiniciar Eclipse, limpiar todos los proyectos y reconstruir todo normalmente aclara las cosas. También tenía los complementos de Maven (versiones anteriores ... no los había tenido por un tiempo) que tenían una tendencia a hacer eso también.

De lo contrario, podría ser un error, tal vez el que dijo Vineet,

Espero que esto ayude

Newtopian
fuente
Sí, lo que ha dicho ocurre más en IDE que no recompilan el código automáticamente. Oracle JDeveloper (por experiencia personal) y, en menor medida (Netbeans), se han encontrado deficientes.
Vineet Reynolds
1
Buen consejo. No dije lo suficiente. A veces pensamos demasiado en el problema y es solo que el sistema no está sincronizado. Como ocurre con el reinicio de una computadora para solucionar problemas simples.
Xonatron
Gracias, ese fue el problema en mi caso. Suena estúpido, pero una simple limpieza y F5 después de una compilación hicieron el trabajo.
jfajunior
20

Es posible que haya omitido accidentalmente todos los puntos de interrupción en la barra de herramientas de Eclipse. Para solucionar esto, vaya a Eclipse -> Ejecutar -> Omitir todos los puntos de interrupción.

Jigna.Shah
fuente
1
Arggh, también hay un atajo para esto, lo más probable es que no verifique accidentalmente un elemento del menú, pero es probable que haya presionado Ctrl + Alt + B. Gracias de todos modos.
Patru
3

Proyecto -> Clean parecía funcionar para mí en JRE 8

JH95
fuente
2

Para que el depurador funcione con control remoto, los archivos java .class deben cumplirse junto con la información de depuración. Si se pasó la opción " -g: none " al compilador, el archivo de clase no tendrá la información necesaria y, por lo tanto, el depurador no podrá hacer coincidir los puntos de interrupción en el código fuente con esa clase en remoto. Mientras tanto, si los archivos jar / class fueron ofuscados , tampoco tendrán información de depuración. Según sus respuestas, lo más probable es que este no sea su caso, pero esta información podría ser útil para otras personas que enfrentan el mismo problema.

Sergeyan
fuente
2

En mi caso, el problema era que no tenía la vista de depuración abierta en la perspectiva de depuración, así que:

1 - Asegúrese de tener abierta la perspectiva de depuración:

el depurador de eclipse no funciona 1

2 - Asegúrese de tener abierta la vista de depuración:

el depurador de eclipse no funciona 2

Dani
fuente
2

Elimine todos los puntos de interrupción y vuelva a agregarlos.

Raffi Khatchadourian
fuente
Esto me lo arregló. Extraño. Thx
Atom999
1

Para JDK7, ejecute-> Configuraciones de depuración, marque "Mantener JUnit en ejecución después de una ejecución de prueba durante la depuración".

Frank Fu
fuente
1

Me pasó una vez, cuando había desmarcado "Ejecutar> Construir automáticamente" y olvidé volver a marcarlo.

Mathiouss
fuente
1

Asegúrese de declarar el paquete en la parte superior. En mi código maravilloso, esto se detiene en los puntos de interrupción:

package Pkg1

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

Esto no se detiene en los puntos de interrupción:

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...
Don Harrington
fuente
Después de luchar mucho, esto resolvió mi problema. Gracias +1
Federico Piazza
0

Para eliminar los puntos de interrupción :

  1. Depura tu clase como prueba junit
  2. Cuando su depurador se detenga, haga clic en la pestaña "puntos de interrupción" junto a "variables" y "expresiones"
  3. En la parte superior derecha de la pestaña de punto de interrupción, haga clic en el botón con dos 'X'
  4. Detenga la prueba, reemplace su punto de interrupción y ejecute el depurador nuevamente
Cyrois
fuente
0

También verifique si los puntos de interrupción en otras líneas funcionan, puede ser un error en el depurador. Tuve un problema con el depurador de Eclipse en el que poner un punto de interrupción en una asignación booleana cuyo código estaba en la siguiente línea no funcionó . Informé esto aquí , pero lo hizo en la línea anterior o siguiente.

Henno Vermeulen
fuente
0

Si nada funciona

  1. Elimine esa configuración de depuración remota / local y cree una nueva.
  2. Agregue la fuente en configuraciones de depuración.
kanaparthikiran
fuente
0

Otro posible problema es que el puerto del depurador puede estar bloqueado por el firewall. Por ejemplo, estaba usando mule anypoint studio (v 5.4.3). El puerto del depurador predeterminado es 6666. Cuando se ejecuta un flujo, no se detiene en el punto de interrupción. cuando cambié el puerto a otro (por ejemplo, 8099), funcionó bien.

Excepción en tiempo de ejecución
fuente
0

Vaya a Right click->Debug Configurationy compruebe si se crean demasiadas instancias de depuración. Mi problema se resolvió cuando eliminé varias instancias de depuración de la configuración y recién comencé a depurar.

priyanka_rao
fuente
0

Si estás en Eclipse,

Haga clic derecho en la carpeta de su proyecto en "Explorador de paquetes".

Ir a Fuente -> Limpiar y elegir su proyecto.

Esto limpiará cualquier desorden y su punto de ruptura debería funcionar ahora.

Sureshbabu E
fuente
0

Crear un nuevo espacio de trabajo funcionó para mí.

Ahmed Tawila
fuente
0

En mi caso, tuve varios proyectos en el mismo espacio de trabajo. El archivo java que estaba intentando depurar estaba presente en más de un proyecto con el mismo paquete.

No necesitaba el otro proyecto, así que simplemente cerré los proyectos no relacionados (o elimine el archivo del proyecto no relacionado).

Shanu Gupta
fuente
0

Un comentario adicional con respecto a la respuesta de Vineet Reynolds.

Me enteré de que tenía que fijar -XX:+UseParallelGCeneclipse.ini

Configuro los argumentos de la máquina virtual (vm) de la siguiente manera

-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M

que resolvió el problema.

Amir Pauker
fuente
-2

Esto es lo que me funciona:

Tuve que poner la dirección de mi servidor local en la configuración del servidor PHP de esta manera:

ingrese la descripción de la imagen aquí

Nota : esa dirección es la que configuro en mi archivo .conf de Apache .

Nota : el único punto de interrupción que funcionaba era el 'Descanso en la primera línea', después de eso, los puntos de interrupción no funcionaron.

Nota : verifique las propiedades de xdebug en su archivo php.ini y elimine las que crea que no son necesarias.

Francisco Corrales Morales
fuente
1
No veo cómo esto responde a la pregunta (sobre la depuración de JUnit y Java)
Newtopian