对于程序员而言,阅读源码是一个非常重要的能力,相信Java程序员最常看的就是JDK的源码了,但有时候我们想具体看看源码在运行时某个变量的值,就会发现Debug时看不到变量的值,这是因为官方在编译 rt.jar 中的类的时候去除了调试信息,那么该怎么办呢?
有两种办法:一种是去网上找编译好有调试信息的 rt.jar,另一种是自己去编译JDK源码,下面就是自己编译的详细过程,希望大家第一次不要怕麻烦,跟着做,弄好之后以后调试就非常方便了
问题效果图:
![3713334736dca6ecb627a7d8dc4db449a124a48e]()
解决后的效果:
![2c3fc52be3d932233d1ba51b2f2d4ca5eba61c06]()
具体步骤:
1.制作可调试的 rt.jar 包
1.1 .在D盘新建jdk7_src及jdk7_rt-debug两个文件夹
![d48425358984996fe34b91848a2798d10f92600b]()
1.2.复制JDK源码
将环境变量中配置的java_home地址或者将用的外部JDK安装目录下的src.zip
复制到D:/jdk7_src,解压.效果如下图
![af29a96cbd1704fe38bea2b7a40402dc216cd952]()
![2a954a331beea883a6a55332dcfa75fab87a6951]()
1.3.选择要编译的源码
原文中说,留下Java,javax,org三个文件夹就足够了,其他都可以删除。
我只是把swing的内容删除了,其他都留下了。大伙可以随意。
swing包目录位置:com\sun\java\swing,javax\swing
1.4.得到要处理的java文件名
命令及效果图如下:
要查看一下,自动生成的filelist.txt中是否有内容哦,没有数据的话下面的操作是没用的。
d:
cd jdk7_src
dir /B /S /X *.java>filelist.txt
![693d36c2924dbd5e9d9094067aab47e52818c89e]()
1.5.复制jre/lib/rt.jar
把JDK安装目录(复制src.zip的那个目录)下jre/lib下的rt.jar复制到jdk7_src目录下
![877ec199d8df1899366c48904260d705624f4a6f]()
![1c64469e764d14a47fca6e47d57829c80b40c5b8]()
1.6.生成一些可调试的class文件夹
执行如下命令,成功后,jdk7_rt-debug文件夹会产生一些可调试的class文件夹,如下图:
如果没有,请打开jdk7_src/log.txt,ctrl+F查找“错误”,并解决。
一般,将报错的java路径及路径对应的文件删除,再执行dir /B /S /X *.java > filelist.txt即可。
javac -J-Xms16m -J-Xmx1024m -sourcepath D:\jdk7_src -cp D:\jdk7_src\rt.jar -d D: \jdk7_rt-debug -g @filelist.txt >> log.txt 2>&1
![29bbdc031fe9be5432ca8abb13b2759f937271fd]()
1.7.将这些文件打包成Jar
命令和效果如下图
cd ..
cd jdk7_rt-debug
jar cf0 rt_debug.jar *
![d727c745ec7285637c301377d40c12148be5306e]()
2.使用可调试的 rt.jar
2.1.把rt_debug.jar放入JDK中
放入java_home/jre/lib/endorsed目录
![2b520cc6c16f8baa2f341bf1894456b17db729c5]()
2.2.将rt_debug.jar加入Eclipse使用的JDK中
![8ae2e064df71e2e360c319b5f3e643c2246ffc66]()
2.3.添加rt_debug.jar的源码包
注意:若原来的JRE目录下已经存在了rt.jar包,则要将新编译的rt_debug.jar的位置在原来的jar包之前,如下图所示。
![cedc9afdfa44575ef5edc150fdc6acdda60bc13d]()
2.4.开始debug吧,你成功了!!
![081fed627a874fcff9181551e5abb9ad983dfddd]()
原文发布时间为:2018-11-20
本文作者:傻瓜不傻108
本文来自云栖社区合作伙伴“趣谈编程”,了解相关信息可以关注“趣谈编程”。