本地声明的variables不能被检查

有时,当我在Eclipse中debugging代码时,碰巧虽然我可以毫无困难地查看和检查类成员variables,但我无法检查函数中本地声明的variables的值。 顺便说一下,当前函数的任何参数都会丢失它们的“真实”名称,而在“variables”窗口中将它们的值列为arg0,arg1,arg2等,但至less可以看到这些值。

目前这种情况正在发生在核心JDK中定义的类中。 我已经validation了安装的和当前的JRE是一个JDK。

有人能够揭示这种行为吗?

显然, 答案是:

与JDK一起提供的rt.jar(核心Java类所在的地方)不会被包含在.class文件中的完整debugging信息编译,所以debugging器没有局部variables信息。

不幸的是,这不是Eclipse可以做的事情 – 所有的debugging器都会遇到与JDK核心类相同的问题。

Eclipse 3.4的发行说明指出:

缺lessdebugging属性
debugging器要求使用debugging属性编译类文件,以便能够显示行号和局部variables。 通常,类库(例如“rt.jar”)编译时没有完整的debugging属性,因此这些类的局部variables和方法参数在debugging器中不可见。

它曾经是 ,你可以从http://download.java.net/jdk6/binaries/得到debuggingrt.jar,但不能再。

所以用-g构build你自己的rt.jar现在似乎是唯一的select。 这非常简单:只需使用JDK中的javac和jar即可。

  • mkdir \tmp; mkdir \tmp\out
  • 将JDK安装目录中的src.zip解压到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:,而只需在启动configuration中将debuggingjar放到JRE之前的Bootstrap条目中。

您可以在以下urlfind1.6.0_25的debugging二进制文件: http : //download.java.net/jdk6/6u25/promoted/b03/index.html

这应该让你debugging到1.6的Java库代码。

我尝试链接( http://www.javaadvent.com/2014/12/recompiling-java-runtime-library-with.html ),下载的ant脚本,并修改它。 修改:在javac中传入<compilerarg line="-g" /> 。 它生成rt.jar。 replace了JRE的rt.jar。 (不要忘记保留备份)。

现在我可以在eclipse中debugging时在rt.jar中查看任何类的局部variables。