重新编译JDK源码以支持Eclipse调试

首先我们要明白JDK source为什么在debug的时候无法观察局部变量,因为在jdk中,sun对rt.jar中的类编译时,去除了调试信息,这样在eclipse中就不能看到局部变量的值。这样的话,如果在debug的时候查看局部变量,就必须自己编译相应的源码使之拥有调试信息。要达到这个目的,要么找网上人家已经编译好的版本,要么自己去编译。

References:

鉴于找到相同版本的编译好的debug源码实在是有点困难,所以最好还是自己动手。
以下都是翻译自参考链接,步骤都是亲自测试通过的,环境为Win10,JDK 8u151,除非说明,否则命令都是在工作目录下执行的!路径不要切换错了。

  1. 创建工作目录,这里我选择D:\tmp
  2. 在工作目录下创建源码文件夹如:jdk8_src和输出文件夹如:jdk_debug
    Snipaste_2018-05-30_18-32-43.png
  3. JDK_HOME文件夹拷贝src.zip文件,解压到jdk8_src中,JDK_HOME的路径可以通过命令echo %JAVA_HOME%查看。
  4. 选择需要编译的文件夹,并把其余的删掉。如果全部编译会需要额外的操作,这里就不操作了,只编译一些常用的。
    选择如下的文件夹:

    • java
    • javax
    • org

    Snipaste_2018-05-30_18-33-03.png

  5. JDK_HOME\jre\lib下找到文件rt.jar,把文件放到工作目录下(这一步只是为了方便命令中少输入些文件的路径名)
  6. 执行命令dir /B /S /X jdk8_src\*.java > filelist.txt,命令会创建一个名为filelist.txt的文件,其中列出了所有会被编译的Java文件,这个文件将会作为javac的输入。
  7. 执行javac命令:javac -J-Xms16m -J-Xmx1024m -sourcepath d:\tmp\jdk8_src -cp d:\tmp\rt.jar -d d:\tmp\jdk_debug -g @filelist.txt >> log.txt 2>&1。注意替换其中相应的路径。这条命令会编译所有的文件并输出到jdk_debug文件夹,并且会在工作目录生成log.txt文件。检查日志内容,应该会得到一堆警告,但是没有错误,如果你发现有错误,请检查命令并删除刚刚通过命令生成的文件,然后重新执行。
  8. 进入jdk_debug目录执行命令:jar cf0 rt_debug.jar *,这会在当前目录生成包含debug信息的运行库。
  9. 将生成的jar文件拷到JDK_HOME\jre\lib\endorsed下,如果endorsed文件夹不存在则创建。
    Snipaste_2018-05-30_18-34-25.png

然后再去debug就能看到JDK源码中的变量了:
Snipaste_2020-03-30_17-18-22.png

标签: none

添加新评论

ali-01.gifali-58.gifali-09.gifali-23.gifali-04.gifali-46.gifali-57.gifali-22.gifali-38.gifali-13.gifali-10.gifali-34.gifali-06.gifali-37.gifali-42.gifali-35.gifali-12.gifali-30.gifali-16.gifali-54.gifali-55.gifali-59.gif

加载中……