无法检查本地声明的变量

use*_*138 34 java eclipse debugging

有时当我在Eclipse中调试代码时,虽然我可以毫无困难地查看和检查类成员变量,但我无法检查函数中本地声明的变量值.顺便说一下,当前函数的任何参数都会丢失它们的"真实"名称,而是在"变量"窗口中将它们的值列为arg0,arg1,arg2等,但至少值是可见的.

目前,这与核心JDK中定义的类有关.我已经验证安装的和当前的JRE是JDK.

有人能够对这种行为有所了解吗?

Von*_*onC 24

显然,答案是:

JDK附带的rt.jar(核心Java类所在的位置)未使用.class文件中包含的完整调试信息进行编译,因此调试器没有本地变量信息.

不幸的是,这不是Eclipse可以做的任何事情 - 所有调试器都会遇到与JDK核心类相同的问题.

Eclipse 3.4发行说明指出:

缺少调试属性
调试器要求使用调试属性编译类文件,如果它能够显示行号和局部变量.通常,类库(例如,"rt.jar")在没有完整的调试属性的情况下进行编译,因此这些类的局部变量和方法参数在调试器中不可见.

  • 如果JDK在其私有JRE中激活调试信息,那将是一件非常好的事情! (2认同)

Geo*_*eng 10

曾经是,你可以从HTTP调试的rt.jar://download.java.net/jdk6/binaries/,但是现在不是了.

因此,使用-g构建自己的rt.jar似乎是现在唯一的选择.这很简单:只需使用JDK中的javac和jar.

  • mkdir \tmp; mkdir \tmp\out
  • src.zip在JDK安装目录中解压缩到tmp\src
  • cd src
  • find -name *.java > files.txt
  • javac -verbose -g -d \tmp\out -J-Xmx512m -cp "<jdk>\jre\lib\rt.jar";"<jdk>\lib\tools.jar" @files.txt
  • cd \tmp\out; jar cvf rt.jar *

如果使用Eclipse,则不需要-Xbootclasspath/p:,而只需在启动配置中将调试jar放入JRE之前的Bootstrap Entries.

  • 我试图使用这个指令在openjdk`jdk7u40-b43`中编译来自`src.zip`的源代码,但javac由于某种原因没有看到来自rt.jar的一些类,附加日志在https://dl.dropboxusercontent.com/ U/14767221/compile.log (3认同)