有时当我在Eclipse中调试代码时,虽然我可以毫无困难地查看和检查类成员变量,但我无法检查函数中本地声明的变量值。顺便说一句,当前函数的任何参数都会丢失它们的“真实”名称,而是在变量窗口中将它们的值列为arg0,arg1,arg2等,但至少值是可见的。
目前正在核心JDK中定义的类中发生这种情况。我已经验证安装的和当前的JRE是JDK。
有人能够对这种行为有所了解吗?
答案 0 :(得分:23)
显然,answer是:
与JDK一起提供的rt.jar(核心Java类所在的位置)未使用.class文件中包含的完整调试信息进行编译,因此调试器没有本地变量信息。
不幸的是,这不是Eclipse可以做的任何事情 - 所有调试器都会遇到与JDK核心类相同的问题。
release notes of Eclipse 3.4州:
缺少调试属性
如果能够显示行号和局部变量,则调试器要求使用调试属性编译类文件。通常,类库(例如,“rt.jar”)在没有完整的调试属性的情况下编译,因此这些类的局部变量和方法参数在调试器中不可见。
答案 1 :(得分:9)
used to be你可以从http://download.java.net/jdk6/binaries/获得调试rt.jar,但不能再这样了。
所以building your own rt.jar with -g似乎是现在唯一的选择。这很简单:只需使用JDK中的javac和jar。
mkdir \tmp; mkdir \tmp\out
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:,而只需在启动配置中将调试jar放入JRE之前的Bootstrap Entries。
答案 2 :(得分:0)
您可以在http://download.java.net/jdk6/6u25/promoted/b03/index.html
找到1.6.0_25的调试二进制文件这应该让你调试1.6的Java库代码。
答案 3 :(得分:0)
我尝试了链接(http://www.javaadvent.com/2014/12/recompiling-java-runtime-library-with.html),下载了ant脚本并对其进行了修改。修改:在javac中传递<compilerarg line="-g" />
。它生成了rt.jar。取代了JRE的rt.jar。 (别忘了保留备份)。
现在我可以在eclipse的调试过程中观察,检查rt.jar中任何类的局部变量。