对于程序员而言,阅读源码是一个非常重要的能力,相信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

本文来自云栖社区合作伙伴“趣谈编程”,了解相关信息可以关注“趣谈编程”。

Debug JDK源码没变量值怎么办?相关推荐

  1. 解决Eclipse调试JDK源码无法查看变量值

    问题 研究JDK源码的同学应该知道,在debug的时候是无法看源码中变量的值的,为什么呢?因为在JDK中,sun对rt.jar中的类编译时,去除了调试信息.那么是否有解决办法呢?答案是肯定的. 解决方 ...

  2. 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值

    最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u9 ...

  3. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  4. 写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  5. jdk源码写过注释后debug提示source code does not match the bytecode

    一.问题说明 环境说明: jdk:jdk1.8.0_161 阅读过jdk源码的人,肯定遇到过这个问题:当你在源码中写过注释,然后再次打断点,你就会发现提示你"Source code does ...

  6. JDK源码重新编译——支持eclipse调试JDK源码--转载

    最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1:   ...

  7. java int类源码,一起学JDK源码 -- Integer类

    Integer类为java基本类型int的包装类,除了前面提到的Byte类,Short类中的大部分方法,Integer类中还提供了很多处理int类型的方法,接下来就让我们一起看看吧. 基础知识: 1. ...

  8. 一点一点看JDK源码(四)java.util.ArrayList 中篇

    一点一点看JDK源码(四)java.util.ArrayList 中篇 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 在前篇中 ...

  9. 跟踪调试JDK源码时遇到的问题及解决方法

    目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...

  10. 再来一篇,看jdk源码大师亲自操刀编写的集合源码

    本文首发于公众号[看点代码再上班],欢迎围观,第一时间获取最新文章. 全文共计1959字18图,预计阅读时间13分钟 大家好,我是tin,这是我的第8篇原创文章 这个图拍摄于老家县城一售楼处.作为外出 ...

最新文章

  1. spring mvc框架设计与实现
  2. SQL Server 2005中创建CLR存储过程
  3. iOS计算输入字符数
  4. 各种Oracle常见操作
  5. 计算机等级考试初级网络工程师,计算机等级网络工程师考试内容
  6. plc梯形图语言c1,plc梯形图编程语言是什么?
  7. 图数据库:AgensGraph
  8. opencv打开pb_NSFW-Score: OpenCV读取pb转化的ONNX模型时报错
  9. Java —— 正则表达式
  10. JetBrains正式发布GoLand
  11. leetcode—19.二叉树遍历相关题目leetcode总结
  12. linux如何清理文件系统,最佳Linux文件系统清理工具
  13. 焓湿图软件 android,焓湿图查询计算软件
  14. ## Manjaro的一站式安装流程(以kde版本为例)
  15. 推荐系统—基于用户的协同过滤算法简单实现
  16. 经典的java角色扮演,盘点2010年十大经典角色扮演类游戏合集
  17. 解决:在ubuntu下安装R语言ks包时的error:configuration failed for package ‘rgl’
  18. 机器心理学家:可能是未来唯一不会被AI取代的职业
  19. 驾驶员监控系统 DMS
  20. opc服务器保存在哪里怎么修改,客户端修改opc服务器的数据

热门文章

  1. Atitit uri url格式规范与解析器 .URIparser 理解URI和URL的区别,我们引入URN这个概念。 URI = Universal Resource Identifier 统一资
  2. Atitit 软件项目的一整套解决方案(gui界面,中间,存储数据库,图像处理,全文搜索)attilax总结
  3. atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc
  4. Atitit.一些公司的开源项目 重大知名开源项目attilax总结
  5. atitit。企业组织与软件工程的策略 战略 趋势 原则 attilax 大总结
  6. paip.FTP服务架设选型
  7. Flex游戏篇——游戏开发概述
  8. 7 年零故障支撑双 11,消息中间件 RocketMQ 如何做到?
  9. 今天的C位,必须是这位浙大卜教授!
  10. 【图像融合】基于matlab高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】