问题
当我们对程序进行debug时,有时候会追踪到jdk的源代码里面去。但是这时候会发现在IDE的debug界面上是无法查看类变量和本地变量信息(仅仅能按顺序查看方法参数的信息)。这是由于jdk自带的包rt.jar没有包含debug信息,所以需要重新编译源代码,并覆盖原有包rt.jar。
编译
下面以jdk8为例来编译一下源代码
准备
- 解压
${JAVA_HOME}\src.zip到目录${workdir}\jdk8_src,删除不需要编译的package,基本上只留下java,javax,org即可。 在
${workdir}目录下执行一下命令,生产编译对象列表1
dir /B /S /X jdk8_src\*.java > filelist.txt
复制
${JAVA_HOME}\\jre\lib\rt.jar到目录${workdir}\rt.jar- 新建目录
${workdir}\jdk8_class编译
在${wowrkdir}目录下,执行以下命令编译源代码,生成class1
javac -J-Xms16m -J-Xmx1024m -sourcepath jdk8_src -cp rt.jar -d jdk8_class -g @filelist.txt >> log.txt 2>&1
查看log.txt文件,应该会发现有很多警告,但是没有错误。
打包
在目录${workdir}\jdk8_class目录下执行以下命令打包。1
jar cf0 rt_debug.jar *
导入包
把生产的rt_debug.jar文件复制到${JAVA_HOME}\jre\lib\endorsed\目录下,如果没有这个目录新建一下。
测试
在IDE(eclipse)里新建一个项目,测试一下jdk源代码是否可以debug。
第一次使用,会发生找不到源代码的情况,只要把rt_debug.jar和${JAVA_HOME}\src.zip绑定一下即可。