一. 问题描述
使用Eclipse
进行开发的时候,跟进jdk
源码的方法里,发现无法查看局部变量的值,鼠标放上去提示cannot be resolved to a variable
。这对我们研究jdk
源码带来很大的不方便。
二. 原因分析
首先我们要明白jdk
source
为什么在debug
的时候无法观察局部变量,原因是sun
对jdk
中的rt.jar
的类编译时,为了减轻文件大小而去除了调试信息,这样在Eclipse
中就不能看到局部变量的值。
所以,如果在debug
的时候查看局部变量,就必须自己编译相应的源码使之拥有调试信息。要达到这个目的,一是找网上人家已经编译好的版本,二是自己去编译一个,下面讲讲如何编译一个可debug
的版本。
三. 解决方案
1. 选择或创建工作目录,比如我选择的目录是:E:\debug_jdk
2. 在你的工作目录中,创建文件夹jdk_src
,用于存放源码;创建文件夹jdk_debug
,用于输出编译结果。
3. 从你的机器安装jdk
的地方找到src.zip
,在你的JDK_HOME
目录(JDK_HOME
指jdk的安装目录)下可以找到,如果没有的话说明下载的jdk
没有包含源码包,可以去网上找一个匹配的版本。比如我的在E:\jdk\Java\jdk1.7.0_67
目录下。然后把src.zip
拷贝到jdk_src
目录下,并解压,如下所示:
4. 解压完后,选择你需要编译的内容,不要的可以删除掉。一般选择如下的几个目录就可以了:java
,javax
,org
5. 从你的JDK_HOMME\jre\lib
中复制rt.jar
文件到你的工作目录中(即E:\debug_jdk
)。
6. 打开cmd
窗口执行如下这条命令:
dir /B /S /X jdk_src\*.java > filelist.txt
如下图所示:
这样会在工作目录下面创建一个filelist.txt
文件,这个文件存放了所有你将要编译的类的名称。目前的目录结构如下所示:
7.接着执行如下的命令:
javac -J-Xms16m -J-Xmx1024m -sourcepath E:\debug_jdk\jdk_src -cp E:\debug_jdk\rt.jar -d E:\debug_jdk\jdk_debug -g @filelist.txt >> log.txt 2>&1
如下图所示:
这条命令将要编译所有你指定的文件,并把编译结果输出到jdk_debug
目录中,同时产生log.txt
日记文件。这个日记文件记录着编译警告,但是没有错误。此时当前工作目录的文件结构如下所示:
8. 打开jdk_debug
目录,可以看到生成了很多包的目录文件(javax
,java
,org
等),如果没有生成文件,说明哪里出错了,检查下输入的命令是否路径不对,也可以查看log.txt
文件的错误信息。进入jdk_debug
目录,输入如下命令:
jar cf0 rt_debug.jar *
如下图所示:
这个命令可以生成我们需要的带编译信息的rt.jar
包。
9. 把这个生成的rt_debug.jar
包复制到JDK_HOME\jre\lib\endorsed
目录下。如果没有endorsed
目录,则自己动手创建一下,如下所示:
10. 点击Eclipse上方窗口的Window --> Preferences --> Java --> Installed JRES
,选择相应的JDK
,点击Edit
,然后选择点击Add External jars
,选择我们上面生成的rt_debug.jar
导入就可以了。
需要注意的是如果原来的JRE
目录下已经存在了rt.jar
包,则要将新编译的rt_debug.jar
的位置在原来的jar
包之前,如下图所示。
11. 现在debug
可以查看局部变量了
四. 文件下载
下面提供已经编译好的两个版本供下载:
jdk1.7
链接: https://pan.baidu.com/s/1jHHHzZg 密码: 3rhu
jdk1.8
链接: https://pan.baidu.com/s/1gf9WrOf 密码: ey3j
公众号ID:longjiazuoA

未经允许不得转载:人生设计师 » 解决在Eclipse中无法查看JDK源码局部变量的问题方案