无法检查本地声明的变量

时间:2008-11-07 08:26:26

标签: java eclipse debugging

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

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

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

4 个答案:

答案 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
  • 将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:,而只需在启动配置中将调试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中任何类的局部变量。