但行好事  莫问前程

解决在Eclipse中无法查看JDK源码局部变量的问题方案

一. 问题描述

使用Eclipse进行开发的时候,跟进jdk源码的方法里,发现无法查看局部变量的值,鼠标放上去提示cannot be resolved to a variable。这对我们研究jdk源码带来很大的不方便。

二. 原因分析

首先我们要明白jdk source为什么在debug的时候无法观察局部变量,原因是sunjdk中的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. 解压完后,选择你需要编译的内容,不要的可以删除掉。一般选择如下的几个目录就可以了:javajavaxorg

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目录,可以看到生成了很多包的目录文件(javaxjavaorg等),如果没有生成文件,说明哪里出错了,检查下输入的命令是否路径不对,也可以查看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源码局部变量的问题方案

分享到:更多 ()

人生设计师-接受不同的声音

联系我关于我