Debug JDK源码没变量值怎么办?
对于程序员而言,阅读源码是一个非常重要的能力,相信Java程序员最常看的就是JDK的源码了,但有时候我们想具体看看源码在运行时某个变量的值,就会发现Debug时看不到变量的值,这是因为官方在编译 rt.jar 中的类的时候去除了调试信息,那么该怎么办呢?
有两种办法:一种是去网上找编译好有调试信息的 rt.jar,另一种是自己去编译JDK源码,下面就是自己编译的详细过程,希望大家第一次不要怕麻烦,跟着做,弄好之后以后调试就非常方便了
问题效果图:
解决后的效果:
具体步骤:
1.制作可调试的 rt.jar 包
1.1 .在D盘新建jdk7_src及jdk7_rt-debug两个文件夹
1.2.复制JDK源码
将环境变量中配置的java_home地址或者将用的外部JDK安装目录下的src.zip
复制到D:/jdk7_src,解压.效果如下图
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
1.5.复制jre/lib/rt.jar
把JDK安装目录(复制src.zip的那个目录)下jre/lib下的rt.jar复制到jdk7_src目录下
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
1.7.将这些文件打包成Jar
命令和效果如下图
cd ..
cd jdk7_rt-debug
jar cf0 rt_debug.jar *
2.使用可调试的 rt.jar
2.1.把rt_debug.jar放入JDK中
放入java_home/jre/lib/endorsed目录
2.2.将rt_debug.jar加入Eclipse使用的JDK中
2.3.添加rt_debug.jar的源码包
注意:若原来的JRE目录下已经存在了rt.jar包,则要将新编译的rt_debug.jar的位置在原来的jar包之前,如下图所示。
2.4.开始debug吧,你成功了!!
原文发布时间为:2018-11-20
本文作者:傻瓜不傻108

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
专访李伟:这么多编程语言,为什么我选择了C++?
C++是一门被广泛使用的编程语言。在众多的C++开发者中,大多数人用面向对象的方式编写代码:我们日常接触的C++项目基本上都是用这种风格组织的;几乎每一本C++教程都会用绝大部分篇幅来讨论面向对象;每位拥有数年C++开发经验的程序员都会对面向对象有自己的见解。 面向对象在C++的开发圈子里成了一种主流,以至于在有些人看来,C++与很多编程语言类似,只是一种面向对象的方言而已。 但事实上,C++所支持的不仅是面向对象这一种编程风格。它还支持另一种编程风格:泛型,并由此衍生出一套编程方法,即编译期计算与元编程。 今天有幸邀请到了《C++模板元编程实战:一个深度学习框架的初步实现》的作者李伟,让我们听听他对C++编程语言的所思所想。 异步社区:可以介绍一下自己吗?目前正在做哪些事情? 李伟:我2011从学校毕业之后就一直从事软件开发相关的工作。曾经在百度自然语言处理部机器翻译组负责线上系统的维护,目前在微软亚洲工程院从事Being搜索的相关开发。 平时的爱好是读书,特别是编程相关的书籍。喜欢尝试新的语言与技术,但对C++编程情有独钟。 异步社区:是什么初衷开始创作《C++模板元编程实战 一个...
- 下一篇
Python 正则表达式——re模块介绍
Python 正则表达式 re 模块使 Python 语言拥有全部的正则表达式功能,re模块常用方法: re.match函数 re.match从字符串的起始位置匹配,如果起始位置匹配不成功,则match()就返回none。,如果匹配成功,则可通过group(num) 或 groups()获取匹配结果。 函数语法 re.match(pattern,string,flags=0) 函数参数 pattern: 正则表达式 string: 字符串。 flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写等等 flags模式 re.I 使匹配对大小写不敏感 re.L 做本地化识别(locale-aware)匹配 re.M 多行匹配,影响 ^ 和 $re.S使 . 匹配包括换行在内的所有字符 re.U 根据Unicode字符集解析字符。这个标志影响 w, W, , B. re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 import re re_str='The re module gives the Python language full regular...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker快速安装Oracle11G,搭建oracle11g学习环境