Java| 调试JDK源码

来源:互联网 发布:淘宝开店铺要交押金吗 编辑:程序博客网 时间:2024/05/21 10:03

博主在在实际的Java学习中,有时候想看看JDK的源码,甚至是在程序运行期间想看看某些源码中变量的值,这时候我们就地来对JDK的源码来进行调试,比如在调试HashMap.


1.导入源码

在JDK的安装目录下有一个src.zip的文件,这个文件就是rt.jar的源码文件.
选中项目后配置Build Path如下:
这里写图片描述
这时候我们就点击JDK的类文件就可以直接查看到源码了.

查看源码失败问题:
配置项目运行的JRE环境是编译的JDK.(运行以来的JRE如果不是编译的JDK在Debug时,可能会存在问题.),这里还要注意的是Eclipse中的编译的使用JDK的版本应该与项目使用的JRE版本一致,具体配置如下:
这里写图片描述
选中项目–>properties–>Project Facets
这里写图片描述


2.调试源码

在JDK源码中打断点开始调试程序,我们会发现一些变量时获取不到值的,如下:
这里写图片描述
这是因为jdk里的代码在打包时删除了一些用于调试的信息,以减小安装包的体积。不过可以通过重新编译jdk源代码来恢复此功能.具体的编译JDK源码建步骤3.

Debug调试打断点失败问题
解决办法如下:检查是否设置了Add line …
这里写图片描述


3.编译JDK源码

在步骤2中,我们尝试去调试JDK源码,发现了一些变量时不能正确获取值的,这时候我们需要重新编译jdk源码.
1.首先创建两个工作目录:(博主这两个目录直接创建在D盘下)
这里写图片描述

jdk_src:         将src.zip在jdk_src下解压.        (解压后可以根据需要删除一些不想编译的源码,常用的只有java,javax,org包,其他的可以删除,有些包可能导致编译事失败)jdk_debug:         编译成功后的带debug信息的jar存放目录.

2.执行如下命令生成可以调试的rt.jar
在CMD命令模式下执行以下命令:

1)找出要编译的类:
D:
dir /B /S /X D:\jdk_src\*.java > filelist.txt

这时在D盘下创建一个叫做filelist.txt的文件,这个文件存放了所有你将要编译的类的名称。

2)将源码编译成Class文件:
这里要注意的是实现要将系统的rt.jar(D:\Java\jdk1.8.0_20\jre\rt.jar)放在D盘下,然后执行以下命令.控制台可能会有警告信息,但是不能出现错误信息.
javac -J-Xms16m -J-Xmx1024m -sourcepath D:\jdk_src -cp D:\rt.jar -d D:\jdk_debug -g @filelist.txt

3)将class文件打成jar包:
cd D:\jdk_debug
jar cf0 rt_debug.jar *

4)配置生成的可以调试的rt_debug.jar到项目中.
这里先看一下项目中的效果:
这里写图片描述

这里之前配置的项目使用的JRE是我配置的默认的JRE,里面配置的是JDK1.8.这里我们就需要去安装JRE的步骤中去将安装的JDK依赖包添加我刚刚生成的rt_debug.jar,添加步骤如下:
Window–> preference–>Java–>Installed JREs
这里写图片描述
这里写图片描述
注意:一定要将rt_debug.jar放置在系统的rt.jar之前.

3.Debug效果
此时我们就可以查看到运行期变量的值了.
这里写图片描述

rt_debug.jar下载

可以调试的rt.jar包,针对jdk1.8编译.
rt_debug.jar密码:wpp1

原创粉丝点击