查看及调试JDK源码

推荐链接

使用Eclipse调试JDK源码时无法查看局部变量的问题

查看JDK源码

eclipse

方式一:

image-20200611092138151

方式二:

image-20200611092814361

image-20200611092856210

idea

不用设置

调试JDK源码时无法查看参数名和局部变量问题

问题

Eclipse 在调试 JDK 源码时,查看变量的窗口 Variables 中无法查看方法中的局部变量;虽然还可以看到方法参数的值,但参数名信息丢失了,变成毫无意义的arg0arg1arg2

方法参数名信息丢失

在调试的时候,Variables窗口没有显示局部变量,并且使用watchinspect查看都不行。

无法查看局部变量

原因

官方发布的 JDK 去除了编译时的调试信息,这是为了降低 JDK 安装包的体积。

若在调试 JDK 源码时想要查看各种变量信息,就需要带有调试信息的class文件。而官方发布的 JDK 中的字节码文件是不带调试信息的。

解决

手动编译官方所提供的源码 src.zip,并使其带上调试信息

完美的解决方案是在stackoverflow上一个问题找到的。

步骤

  1. 选一个地方作为你的工作目录,比如F:\jdk_compile
  2. 在工作目录中,创建源文件夹jdk_src和输出文件夹jdk_debug
  3. JAVA_HOME路径(即jdk安装路径)获取src.zip文件并将其解压到jdk_src
  4. 解压后,选择要编译的内容,删除其余内容。我选择了javajavaxorg三个文件夹,其他用不到。
  5. JAVA_HOME\jre\lib路径下获取rt.jar并放入工作目录中。
  6. 进入工作目录,执行命令dir /B /S /X jdk_src\*.java > filelist.txtfilelist.txt包含将要编译的所有Java文件列表,这将作为javac的输入。
  7. 继续执行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 。检查日志内容,会得到一堆警告但没有错误。
  8. 进入jdk_debug文件夹并执行命令jar cf0 rt_debug.jar *,这将生成带有debug信息的运行库。
  9. 将新 jar 包复制到JAVA_HOME\jre\lib\endorsed,如果endorsed文件夹不存在,请创建它。

命令整理:

1
2
3
4
5
6
7
8
9
10
11
C:\Users\Administrator>f:

F:\>cd jdk_compile

F:\jdk_compile>dir /B /S /X jdk_src\*.java > filelist.txt

F:\jdk_compile>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

F:\jdk_compile>cd jdk_debug

F:\jdk_compile\jdk_debug>jar cf0 rt_debug.jar *

添加扩展 jar

image-20200611105118125

image-20200611105743665

结束

重新调试并查看方法参数名和局部变量