Las variables declaradas localmente no se pueden inspeccionar

A veces, cuando estoy depurando el código en Eclipse, sucede que aunque puedo ver e inspeccionar las variables de los miembros de la clase sin ninguna dificultad, no puedo inspeccionar los valores de las variables declaradas localmente dentro de las funciones. Como un aparte, cualquier parámetro de la función actual pierde sus nombres “reales” y en su lugar uno ve sus valores enumerados en la ventana Variables como arg0, arg1, arg2, etc. pero al menos los valores son visibles.

Esto está ocurriendo actualmente en relación con las clases definidas dentro del núcleo JDK. He verificado que el JRE instalado y actual es un JDK.

¿Alguien puede arrojar algo de luz sobre este comportamiento?

Aparentemente, la respuesta es:

el rt.jar que se envía con el JDK (donde viven las clases principales de Java) no se comstack con la información de depuración completa incluida en los archivos .class, por lo que el depurador no tiene información variable local.

Desafortunadamente, esto no es algo de lo que Eclipse puede hacer nada: todos los depuradores tendrán el mismo problema con las clases principales de JDK.

Las notas de la versión de Eclipse 3.4 dicen:

Faltan los atributos de depuración
El depurador requiere que los archivos de clase se compilen con atributos de depuración para poder mostrar los números de línea y las variables locales. Muy a menudo, las librerías de clase (por ejemplo, “rt.jar”) se comstackn sin atributos de depuración completos, y por lo tanto las variables locales y los argumentos de método para esas clases no son visibles en el depurador.

Solía ​​ser que puedes obtener debug rt.jar de http: //download.java.net/jdk6/binaries/, pero ya no.

Así que construir tu propio rt.jar con -g parece ser la única opción ahora. Es muy simple: solo usa javac y jar de tu JDK.

  • mkdir \tmp; mkdir \tmp\out
  • Extraiga src.zip en el directorio de instalación de JDK en tmp\src
  • cd src
  • find -name *.java > files.txt
  • javac -verbose -g -d \tmp\out -J-Xmx512m -cp "\jre\lib\rt.jar";"\lib\tools.jar" @files.txt
  • cd \tmp\out; jar cvf rt.jar *

Si usa Eclipse, no necesita -Xbootclasspath / p :, en su lugar, simplemente coloque su jar de depuración en Entradas Bootstrap antes de JRE en la configuración de inicio.

Puede encontrar los binarios de depuración para 1.6.0_25 en: http://download.java.net/jdk6/6u25/promoted/b03/index.html

Esto debería permitirle depurar en el código de la biblioteca de Java para 1.6.

Probé el enlace ( http://www.javaadvent.com/2014/12/recompiling-java-runtime-library-with.html ), descargué el script ant y lo modifiqué. Modificación: pasó en javac. Se generó rt.jar. Reemplazado rt.jar de JRE. (No te olvides de mantener una copia de seguridad).

Ahora puedo mirar e inspeccionar variables locales de cualquier clase en rt.jar durante la depuración en eclipse.