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
本文来自云栖社区合作伙伴“趣谈编程”,了解相关信息可以关注“趣谈编程”。
Debug JDK源码没变量值怎么办?相关推荐
- 解决Eclipse调试JDK源码无法查看变量值
问题 研究JDK源码的同学应该知道,在debug的时候是无法看源码中变量的值的,为什么呢?因为在JDK中,sun对rt.jar中的类编译时,去除了调试信息.那么是否有解决办法呢?答案是肯定的. 解决方 ...
- 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值
最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u9 ...
- java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...
- 写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...
- jdk源码写过注释后debug提示source code does not match the bytecode
一.问题说明 环境说明: jdk:jdk1.8.0_161 阅读过jdk源码的人,肯定遇到过这个问题:当你在源码中写过注释,然后再次打断点,你就会发现提示你"Source code does ...
- JDK源码重新编译——支持eclipse调试JDK源码--转载
最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1: ...
- java int类源码,一起学JDK源码 -- Integer类
Integer类为java基本类型int的包装类,除了前面提到的Byte类,Short类中的大部分方法,Integer类中还提供了很多处理int类型的方法,接下来就让我们一起看看吧. 基础知识: 1. ...
- 一点一点看JDK源码(四)java.util.ArrayList 中篇
一点一点看JDK源码(四)java.util.ArrayList 中篇 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 在前篇中 ...
- 跟踪调试JDK源码时遇到的问题及解决方法
目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...
- 再来一篇,看jdk源码大师亲自操刀编写的集合源码
本文首发于公众号[看点代码再上班],欢迎围观,第一时间获取最新文章. 全文共计1959字18图,预计阅读时间13分钟 大家好,我是tin,这是我的第8篇原创文章 这个图拍摄于老家县城一售楼处.作为外出 ...
最新文章
- spring mvc框架设计与实现
- SQL Server 2005中创建CLR存储过程
- iOS计算输入字符数
- 各种Oracle常见操作
- 计算机等级考试初级网络工程师,计算机等级网络工程师考试内容
- plc梯形图语言c1,plc梯形图编程语言是什么?
- 图数据库:AgensGraph
- opencv打开pb_NSFW-Score: OpenCV读取pb转化的ONNX模型时报错
- Java —— 正则表达式
- JetBrains正式发布GoLand
- leetcode—19.二叉树遍历相关题目leetcode总结
- linux如何清理文件系统,最佳Linux文件系统清理工具
- 焓湿图软件 android,焓湿图查询计算软件
- ## Manjaro的一站式安装流程(以kde版本为例)
- 推荐系统—基于用户的协同过滤算法简单实现
- 经典的java角色扮演,盘点2010年十大经典角色扮演类游戏合集
- 解决:在ubuntu下安装R语言ks包时的error:configuration failed for package ‘rgl’
- 机器心理学家:可能是未来唯一不会被AI取代的职业
- 驾驶员监控系统 DMS
- opc服务器保存在哪里怎么修改,客户端修改opc服务器的数据
热门文章
- Atitit uri url格式规范与解析器 .URIparser 理解URI和URL的区别,我们引入URN这个概念。 URI = Universal Resource Identifier 统一资
- Atitit 软件项目的一整套解决方案(gui界面,中间,存储数据库,图像处理,全文搜索)attilax总结
- atitit.短信 验证码 破解 v3 p34 识别 绕过 系统方案规划----业务相关方案 手机验证码 .doc
- Atitit.一些公司的开源项目 重大知名开源项目attilax总结
- atitit。企业组织与软件工程的策略 战略 趋势 原则 attilax 大总结
- paip.FTP服务架设选型
- Flex游戏篇——游戏开发概述
- 7 年零故障支撑双 11,消息中间件 RocketMQ 如何做到?
- 今天的C位,必须是这位浙大卜教授!
- 【图像融合】基于matlab高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】