如何调试JDK源码

相信各位小伙伴们跟我一样,想通过JDK源码来学习Java,比如collections包,java.util.concurrent包。

可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。

下面是编译jdk的具体步骤:
        1.把C:\java\jdk1.6.0_26\src.zip解压到C:\java\jdk1.6.0_26\src
        2.执行命令 dir /B /S /X C:\java\jdk1.6.0_26\src\*.java > fileList-jdk1.6.0_26-src.txt 生成一个包含所有源文件

列表的txt文档
        3.最重要的一步,运行以下命令
        c:\Java\jdk1.6.0_26\bin\javac -verbose -nowarn -g -source 1.6 -target 1.6 -J-Xms512m -J-Xmx1024m -

bootclasspath  c:\Java\jre6\lib\rt.jar;c:\Java\jre6\lib\jce.jar;c:\Java\jre6\lib\jsse.jar;c:\Java\jre6\lib

\resources.jar;c:\Java\jre6\lib\charsets.jar;c:\Java\jre6\lib\deploy.jar -sourcepath c:\Java\jdk1.6.0_26\src -

classpath c:\Java\jdk1.6.0_26\src -d compiled @fileList-jdk1.6.0_26-src.txt
          其中-d complied是要新建的文件夹,用来存放编译生成的class文件,@fileList-jdk1.6.0_14-src.txt就是刚才生成的

文本文件,这个步骤大概要执行2-3分钟左右。
        4. 执行完毕,所有新编译后的class文件都在complied文件夹中,重新打包生成rt.jar或者覆盖原来rt.jar中的类,生成新

的rt.jar。最后把新生成的rt.jar放到c:\Java\jre6\lib和C:\java\jdk1.6.0_10\jre\lib覆盖原有的rt.jar,覆盖之前最好备份一

下,这样就大功告成了。

需要说明的几点:
A. java最好安装在某盘的根目录下(如c:\Java\jdk1.6.0_10),不要放在program files下,因为这个文件夹名有个空格,执行

javac命令时有可能产生不必要的麻烦。
B. 如果想在eclipse中跟踪调试,需要在Windows-Preferences-Java-Installed JRE下,选择安装的jdk,点edit,然后在列出的jre

system libraries列表中选择rt.jar,设置其中的Source attachment为C:\java\jdk1.6.0_10\src.zip。
C. 要将 fileList-jdk1.6.0_10-src.txt拷贝到bin目录下,并在目录下建好compiled目录,到这个目录下执行脚本3,并且将脚本3

修改为一行。
D.将原rt.jar中的sun等包,拷贝到新的rt.jar下,src.zip中没有sun包的源码。

记得做之前先备份一下rt.jar,别说我没提醒您。

你可能感兴趣的:(jdk)