最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码。

整个设置过程也很简单:

首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u92-windows-x64),JDK安装路径根目录里有个“src.zip”就是JDK的源码文件压缩包;

设置好环境变量的JAVA_HOME变量和PATH变量(JAVA_HOME变量值是JDK安装路径根目录D:\Java\jdk-8u92-windows-x64)。

然后打开Eclipse设置可以Debug模式调试JDK源码:

1 打开Eclipse的菜单栏Windows->Preferences:点开Java->Installed JREs,点击Add->Standard VMJRE home就填写你环境变量里的%JAVA_HOME%路径(我的%JAVA_HOME%是D:\Java\jdk-8u92-windows-x64);

2 在JRE system libraries可以看到JDK源码的相关JAR包,点开某个JAR(如D:\Java\jdk-8u92-windows-x64\jre\lib\resources.jar、D:\Java\jdk-8u92-windows-x64\jre\lib\rt.jar……),可以看到“Source attachment:(none)”,点击右侧的“Source attachment…”选择External location->Path通过路径指向JDK源码文件压缩包%JAVA_HOME%\src.zip

通过上面两步设置,就有了一个可以调试JDK源码的JRE了。

只需把项目的JRE指定为这个设置好的JRE,就可以调试JDK源码。

通过上面的设置,虽然调试可以进入到JDK源码,但是你会发现JDK源码的方法的传入参数和方法体里的局部变量是无法显示值的。

那是因为为了尽量节省JAR包的大小,Oracle在编译JDK源码时,去除了对变量值的显示。

所以,我们需要重新编译和打JAR包:

1 找一个空的文件夹作为工作空间根目录,如E:\jdk,在里面新建两个文件夹“jdk_src”和“jdk_debug”;其中“jdk_src”用来存放待编译的.java源码文件,“jdk_debug”用来存放编译后的.class字节码文件;

2 到%JAVA_HOME%\jre\lib找到rt.jar,将它拷贝到工作空间根目录 E:\jdk

3 打开JDK源码文件压缩包%JAVA_HOME%\src.zip,把java、javax、org这三个文件夹,直接拖拽解压到用来存放待编译的.java源码文件的E:\jdk\jdk_src文件夹;

4 运行CMD,执行如下指令:

4.1 切换目录到工作空间 CD E:\jdk 

列出E:\jdk\jdk_src里所有待编译的.java源码文件到filelist.txt: dir /B /S /X .\jdk_src\*.java > .\filelist.txt ;

完成后将会在E:\jdk生成一个filelist.txt,里面列出了很多行**.java;

4.2 将jdk_src里所有待编译的.java源码文件,编译成.class字节码文件,放到jdk_debug这个用来存放编译后的.class字节码文件的文件夹里: javac -J-Xms16m -J-Xmx1024m -sourcepath .\jdk_src -cp .\rt.jar -d .\jdk_debug -g @.\filelist.txt >> .\log.txt 2>&1 

编译过程中将会在E:\jdk\生成编译日志文件log.txt,编译完成后可以在E:\jdk\jdk_debug看到生成了相应的文件夹和.class字节码文件;

提醒:打开编译日志文件E:\jdk\log.txt,如果除了警告之外还有错误的话,那么很可能是JDK版本不一致。请确保你的JDK源码压缩包src.zip和环境变量里的%JAVA_HOME%保持一致!!!

4.3 切换目录 CD E:\jdk\jdk_debug ,将.class字节码文件打成JAR包: jar cf0 .\rt_debug.jar .\* ;打包完成后将会在E:\jdk\jdk_debug生成rt_debug.jar

有了这个可以调试时显示变量值的rt_debug.jar,接下来你只需要在Eclipse把这个JAR包加到你设置好的JRE:

打开Eclipse的菜单栏Windows->Preferences:点开Java->Installed JREs,选择你设置好的JRE点击Editd,在JRE system libraries点击右边Add External JARs,把rt_debug.jar添加进去,并点击Up把rt_debug.jar上移到rt.jar之上。

接下来,好好享受品味JDK源码的乐趣吧。

中文参考文献:http://blog.csdn.net/appleprince88/article/details/21873807

英文参考文献:http://stackoverflow.com/questions/18255474/debug-jdk-source-cant-watch-variable-what-it-is

设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值相关推荐

  1. Eclipse中关联并调试JDK源码

    eclipse关联JDK源码的一般步骤: 1.依次选择Window -> Preferences: 2.依次选择Java -> Installed JREs -> Jre- -> ...

  2. 调试JDK源码-一步一步看HashMap怎么Hash和扩容

    调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...

  3. 跟踪调试JDK源码时遇到的问题及解决方法

    目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...

  4. 通过CLion 调试JDK源码

    通过CLion 调试JDK源码 0. 简述 0.1 使用环境: 宿主机操作系统:Windows 10 专业版 虚拟机软件:VMware® Workstation 16 Pro 虚拟机操作系统:[ubu ...

  5. 调试JDK源码-ConcurrentHashMap实现原理

    调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...

  6. 调试JDK源码-Hashtable实现原理以及线程安全的原因

    调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...

  7. 调试JDK源码-HashSet实现原理

    调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...

  8. JDK源码重新编译——支持eclipse调试JDK源码--转载

    最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1:   ...

  9. 解决Eclipse调试JDK源码无法查看变量值

    问题 研究JDK源码的同学应该知道,在debug的时候是无法看源码中变量的值的,为什么呢?因为在JDK中,sun对rt.jar中的类编译时,去除了调试信息.那么是否有解决办法呢?答案是肯定的. 解决方 ...

最新文章

  1. HTML5基础01-网页的构造块
  2. 如何利用MongoDB实现高性能,高可用的双活应用架构?
  3. MySQL-处理重复数据[20180517]
  4. java 8 lambda_Java 8 Lambda演练
  5. PostgreSQL在Update时使用Substring函数截取字符串并且加上CASE WHEN THEN条件判断
  6. openGauss 正式开源并成立开源社区
  7. 归并算法(分割与合并)
  8. ansible 常用命令
  9. C语言基础专题 - 数据类型与强制类型转换(编辑中)
  10. 力扣-1641. 统计字典序元音字符串的数目
  11. 02 - Tomcat配置
  12. java jdk 8 中文文档
  13. kettle下载百度网盘地址含入门教程6(多表关联插入更新)
  14. UE4 虚幻 常用的流程控制蓝图节点介绍
  15. 独家秘技||如何快速入门一个陌生知识领域?
  16. java抠图边框颜色处理_ps抠图边缘颜色怎么处理
  17. 【GB28181】协议详解
  18. 你也能轻松破解CNKI 密码
  19. windows7计算机配置要求,win7系统要求电脑最低配置多少
  20. win7访问共享文件出现登录失败:禁用当前用户

热门文章

  1. 皮一皮:考试了,全国统一舔狗学校招生考试!
  2. 皮一皮:美甲的最高境界...
  3. 京东一面:说说ThreadLocal的使用场景及使用方式
  4. 百度网盘的速度又又又又又又被黑了...侮辱性极强...
  5. 皮一皮:充实的一天...
  6. 10 个牛逼的单行代码编程技巧,你会用吗?
  7. 重磅:Elasticsearch上市!市值近50亿美元
  8. 将矩阵转为一行_矩阵与矩阵乘积简介
  9. 软工文档”注意注意“事项
  10. pytorch android