本地声明的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。