查看及调试JDK源码
推荐链接
查看JDK源码
eclipse
方式一:
方式二:
idea
不用设置
调试JDK源码时无法查看参数名和局部变量问题
问题
Eclipse 在调试 JDK 源码时,查看变量的窗口 Variables
中无法查看方法中的局部变量;虽然还可以看到方法参数的值,但参数名信息丢失了,变成毫无意义的arg0
、arg1
、arg2
。
在调试的时候,Variables
窗口没有显示局部变量,并且使用watch
或inspect
查看都不行。
原因
官方发布的 JDK 去除了编译时的调试信息,这是为了降低 JDK 安装包的体积。
若在调试 JDK 源码时想要查看各种变量信息,就需要带有调试信息的class文件。而官方发布的 JDK 中的字节码文件是不带调试信息的。
解决
手动编译官方所提供的源码 src.zip
,并使其带上调试信息
完美的解决方案是在stackoverflow上一个问题找到的。
步骤
- 选一个地方作为你的
工作目录
,比如F:\jdk_compile
- 在工作目录中,创建源文件夹
jdk_src
和输出文件夹jdk_debug
- 从
JAVA_HOME
路径(即jdk安装路径)获取src.zip
文件并将其解压到jdk_src
- 解压后,选择要编译的内容,删除其余内容。我选择了
java
、javax
、org
三个文件夹,其他用不到。 - 从
JAVA_HOME\jre\lib
路径下获取rt.jar
并放入工作目录
中。 - 进入
工作目录
,执行命令dir /B /S /X jdk_src\*.java > filelist.txt
,filelist.txt
包含将要编译的所有Java文件列表,这将作为javac的输入。 - 继续执行
javac
命令:javac -J-Xms16m -J-Xmx1024m -sourcepath F:\jdk_compile\jdk_src -cp F:\jdk_compile\rt.jar; -d F:\jdk_compile\jdk_debug -g @filelist.txt >> log.txt 2>&1
。这会编译 jdk_src 中的所有文件,并输入日志到 log.txt 。检查日志内容,会得到一堆警告但没有错误。 - 进入
jdk_debug
文件夹并执行命令jar cf0 rt_debug.jar *
,这将生成带有debug信息的运行库。 - 将新 jar 包复制到
JAVA_HOME\jre\lib\endorsed
,如果endorsed
文件夹不存在,请创建它。
命令整理:
1 | C:\Users\Administrator>f: |
添加扩展 jar
结束
重新调试并查看方法参数名和局部变量