2010-03-10 19 views
7

Estoy utilizando eclipse europa (3.5) en Windows Vista Home Premium de 64 bits utilizando JDK 1.6.0_18 (32 bits).no se pueden colocar puntos de interrupción en eclipse

Normalmente, puedo poner puntos de interrupción bien; Sin embargo, para una clase particular que NO es parte del proyecto (esta clase está dentro de un archivo .JAR (el archivo .JAR es parte del proyecto)), aunque he adjuntado un directorio fuente a este archivo .JAR, no puedo para colocar un punto de quiebre en esta clase.

Si hago doble clic en el panel de punto de interrupción (borde izquierdo), veo que se coloca un punto de interrupción de clase. Me preguntaba si NO había información de depuración; Sin embargo, descubrió que esta clase en particular se compiló usando la tarea ant/javac utilizando debug = "true" y debuglevel = "lines, vars, source". Incluso ejecuté jad en esta clase para confirmar que efectivamente contenía la información de depuración.

Entonces, ¿por qué el eclipse me impide colocar un punto de interrupción?

EDITAR: Para que todos entiendan el contexto, esta es una aplicación web que se ejecuta bajo tomcat 6.0. Soy un depurador remoto de la aplicación del eclipse después de haber iniciado el tomcat fuera. La aplicación está funcionando bien. Intento entender el comportamiento de la clase anterior que no puedo hacer ya que eclipse no me permite establecer un BP.

P.S: Vi algunos hilos aquí hablando de que no se golpea a los BP, pero en mi caso, ¡no puedo colocar el BP!

P.P.S: Intenté JDK 1.6.0_16 antes de probar 1.6.0_18.

Gracias por cualquier apuntador.

+0

¿Intentó ingresar a la clase desde una clase de llamada? ¿Mostró la fuente adjunta? No es una solución, pero puede ayudar. – josefx

+0

josefx: Esta clase se llamaba usando Reflection, que requiere bastantes HOP antes de que se golpee el método real, no pise el método. – anjanb

Respuesta

2

Parece que Eclipse no puede encontrar el archivo jar en el classpath, aunque usted dijo que el archivo jar es parte del proyecto. ¿Qué sucede si ejecuta la aplicación normalmente? ¿Obtiene una ClassDefNotFoundException o algo similar?

Si revisa las pestañas en la configuración Ejecutar/Depurar, debería poder ver qué rutas de acceso y archivos jar están en el classpath en tiempo de ejecución. También puede agregar archivos jar que no son necesarios para compilar la aplicación, pero que son necesarios para ejecutarlo.

+0

hi richj, gracias por su nota. cuando trato de buscar la clase usando CTRL + MAYÚS + T (tipo abierto), puedo abrir esa clase en particular y eclipse me muestra la fuente que adjunté al .JAR. Aunque puedo poner BPs en las clases que son parte del proyecto, no puedo poner BPs en la clase anterior. – anjanb

+0

Eso implica que el archivo jar está en la classpath de compilación. El classpath de tiempo de ejecución no es necesariamente el mismo que el classpath de compilación, pero admito que esta es una posibilidad remota ya que generalmente se necesita cambiar activamente para forzar que los dos classpaths sean diferentes. Si la aplicación se ejecuta a través del código cuando no se utiliza el depurador, entonces el problema debe ser algo diferente. – richj

+0

En este caso, estaría tentado de establecer un pequeño proyecto de prueba para tratar de resolver lo que está sucediendo. Solo necesita contener el archivo jar problemático y una pequeña clase que contiene uno o más métodos de prueba. – richj

4

tratar de tomar un vistazo a la configuración de Java> Depuración> Paso filtrar en algún momento de su habilitadas y no se puede dejar dentro de un paquete filtrada

+0

sin filtro de pasos habilitado. – anjanb

1

aunque he adjuntado un directorio de origen a este archivo JAR , No puedo colocar un punto de interrupción en esta clase.

Dice "un directorio de fuentes". ¿Estás seguro de que es la misma versión que se utilizó para compilar el contenedor? Si está adjuntando una versión de código fuente diferente, los números de línea pueden no coincidir, y su punto de ruptura no se activará.

+0

hi chris, sí, compilé el contenedor yo mismo de las fuentes. Entonces, sé que el directorio de origen y el .JAR están sincronizados. De lo contrario, This .JAR se preparó a partir de múltiples proyectos. Se directorio de origen tenía la siguiente estructura SourceDir Un org fcitmuk db B org fcitmuk epihandy C org fcitmuk epihandy xform D org fcitmuk epihandy Alguna pista? – anjanb

1

i M cuenta de un error en Eclipse donde los puntos de quiebre no trabajan con una versión específica del JDK 1.6.x Para obtener más información vistazo a here

+1

gracias. esto fue un problema en JDK 1.6.0_14 pero se solucionó en 1.6.0_16. Actualmente estoy usando 1.6.0_18 y tengo este problema. ¡Algo me dice que he olvidado algo pero que no puedo ubicarlo! :-( – anjanb

1

Usar un plugin llamado JadClipse descompilar el frasco en tiempo de ejecución, el lugar el punto de corte en el punto donde se invoca el método JAR, luego presiona F6 y deberías poder entrar en tu método JAR.

+0

Tengo el origen de .JAR por lo que no hay necesidad de hacer JAD en tiempo de ejecución – anjanb

+0

¿El JAR está compilado de la misma fuente que ha adjuntado? Esto es crucial porque de lo contrario los números de línea no coinciden y puede no funcionar cuando adjuntas el código. –

+1

Cuando la fuente y .JAR no están sincronizados, los puntos de interrupción de eclipse se vuelven locos y he visto que algo así sucedía antes. Pero esta vez, no puedo establecer un BP en ninguna parte de la clase, ni siquiera un solo BP – anjanb

-1

Paso 1: Activar/Habilitar punto de interrupción Ajuste el punto de ruptura en la línea de código o punto de entrada método desde donde desea iniciar la depuración del código.Haga clic derecho en el margen izquierdo del editor al lado de la línea de código y aparece un menú contextual. Elija un punto de interrupción de palanca en el menú contextual

Paso 2: Configurar el punto de interrupción para detener la ejecución Para iniciar la depuración, la ejecución debe detenerse en el punto de interrupción especificado. Para ello haga clic en propiedades de punto de interrupción y haga lo siguiente:

1. Check Hit count 
2. Specify value as 1 
3. Select “Suspend thread” option 

Esto detendrá la ejecución del programa cuando golpea el punto de interrupción.

Paso 3: Cambiar a la perspectiva de depuración

En Eclipse, seleccione Ventana -> Abrir perspectiva -> Depuración

Paso 4: Ejecutar en modo de depuración

Ahora ejecute el programa de depuración modo. Seleccione Ejecutar -> Depuración

Ahora el programa comienza a funcionar en modo de depuración y se podría ver el estado de la rosca como “correr”

Cuando el programa golpea el punto de ruptura del estado de los cambios de hilo de “correr” a “suspendido”

Paso 5: Depuración del código con variables Expresiones \ Ver \ Inspeccionar

Ahora el código se detiene en el punto de interrupción. Podría usar las variables/expresiones de observación para monitorear el valor actual de la variable de depuración. Supongamos que establece el punto de interrupción en la variable denominada "contador" y el programa se detiene en la variable Agregue la expresión con el nombre de variable "contador" que le permite controlar el valor de la variable al ejecutar el programa También podría Haga clic con el botón derecho en la variable del contador y seleccione "Inspeccionar" en el menú contextual Si se trata de un método, seleccione el nombre del método y haga clic en "Ingresar en la selección". Esto le permitirá monitorear o depurar la ejecución del método línea por línea.

Paso 6: Use la tecla F6 para entrar en el método de

Para “paso en” la siguiente línea de código ejecutable en el método actual, pulse la tecla “F6 clave”. Esto pasará el control de programa de la línea actual a la siguiente línea de código ejecutable.

+0

Este comentario no responde una sola pregunta que el OP hizo. – snowe

2

Al intentar agregar puntos de corte para una página .jsp resultó que la página no se abrió con un editor JSP, lo que impidió la configuración de puntos de interrupción.

0

Solo una simple actualización del archivo .jar hizo el truco para mí.

Pude colocar puntos de interrupción en todos los otros archivos de clase del mismo paquete excepto uno. Lo que observé es que, cuando abrí este archivo de clase en el editor y seleccioné "Enlace con Editor", eclipse no me llevó a este archivo de clase, sino solo al paquete de este archivo de clase.

Después de la actualización, funcionó "Link with Editor" y pude colocar el punto de interrupción.

Si alguien puede explicar este comportamiento, será útil.

Cuestiones relacionadas