解决debug到jdk源码时不能查看变量值的问题
如何跟踪jdk源码
看到这个标题大概大家都会在心里想谁还跟踪个源码呀,在eclipse中打个断点,以debug的方式运行,然后F5进入方法,F6跳过方法,F7跳出方法。但是不知道大家有没有注意到,如果你跟踪到的是jdk源码的话,比如HashMap的put方法,即使你F5进入到这个方法的内部了,你也看不到你put的 key 和 value 的实际值。但是我们既然要跟踪源码,那么肯定要看到我们设置的 key 和 value 是如何历经九九八十一难才进入到 HashMap 这个桶之中的。为什么说是桶,大家有兴趣的可以自己去深入了解一下HashMap,这里我就不做过多的介绍了。
这是我们跟踪源码看到的情况:

这是我们想要看到的情况:

接下来就是今天的正题了
1、 编译源码
1.1 、简单介绍
首先我们要知道一个jar也就是rt.jar, 它是JAVA基础类库,也就是你在java doc里面看到的所有的类的class文件,但是 orcale 在编译jdk源码的时候为了减小jar包的大小,使用的是 javac -g:none 也就是不带任何的调试信息。这就是我们跟踪jdk源码但是看不到变量值的罪魁祸首,但是上帝在给你关了一扇门的同时也会给你开一扇窗的。那么我现在就来带你一下这扇窗是怎么打开的。

上面这张图是jdk安装目录,可以看到这个有个src.zip,它就是今天的主角:jdk源码,你可以把它解压出来看一下里面的内容,其实就是一个个的java类。
1.2、 开始编译源码
- 我们需要将它解压出来,至于放在哪里看你心情,只要你能找得到就可以了,因为我们它是我们今天的重头戏。解压出来就是下面这些东西

- 打开eclipse新建一个java工程,命名也看你心情。

- 将第一步解压出来的那6个文件夹全部复制到你工程下的src中(其实不需要全部,有些是可以删除的,但是为了省事就全部都复制进去好了。)

- 其中有报错,但是你不用管,你只需要等到eclipse将这个工程编译完成后将其导出为jar文件。选中
src-->右键-->选择Export

- 取好你的名字,选择放到哪里,然后
Finish就可以了。至此我们就完成第一步了。

2、 关联源码
- 在你的eclipse的工具栏选择
window-->preferences,找到Installed JREs, 选择你使用的jdk点击Edit进行编辑。

- 在编辑窗口点击
Add External JARs选择我们刚刚编译好导出的那个jar包。

红色的jar就是我们自己导出的jar,我们要将我们导出的jar往上移,移到蓝色的
rt.jar上面。然后Finish

将我们编译的jar和src.zip进行关联。选择
JRE System Library找到里面我们编译的jar, 右键-->Propertites。

- 在
Propertites选择External File...找到我们最开始的src.zip并选择它。然后Apllyok。一切结束。

3、 大功告成
现在你就可以愉快的跟踪源码,看看你的变量是怎么在java的世界中遨游了。
解决debug到jdk源码时不能查看变量值的问题的更多相关文章
- 跟踪调试JDK源码时遇到的问题及解决方法
目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...
- eclipse如何debug调试jdk源码(任何源码)并显示局部变量
最近要看struts2源码 仿照了一下查看jdk源码的方式 首先你要有strtus2的jar包和源码,在struts官网上下载时,选择full版本,里面会有src也就是源码了. jar导入项目,保证可 ...
- eclipse如何debug调试jdk源码
java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而在debug时查看变量却十分麻烦.例如调试HashMa ...
- 调试JDK源码时,不能查看变量的值
前几天本来想以debug模式看一下JDK的源码,进入调试模式时才发现,根本看不到方法里面变量值的情况.为什么呢?JDK现在的版本中,编译过后,去除了里面的调试信息.解决办法是,编译那些类,使其带有调试 ...
- eclipse如何debug调试jdk源码,并显示局部变量
http://blog.csdn.net/xuefeng0707/article/details/8738869 http://blog.csdn.net/leehsiao/article/detai ...
- xcode在调试时无法查看变量值
现象:在xcode中调试程序的时候,无论是鼠标指在变量上,还是在gdb中po命令都看不到内存中变量的值. 解决办法:在Project的Build中把 Optimization Level 设置成 No ...
- 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值
最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u9 ...
- eclipse调试jdk源码
摘要 介绍使用eclipse调试jdk源码 java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而在debu ...
- JDK源码包结构分类
最近查看JDK源码时,无意间发现几个类在陌生包里:com.sun.*.sun.*.org.*,google了一把总结了下以备他人搜索,如内容有误欢迎指正! Jre库包含的jar文件(jdk1.6) ...
随机推荐
- Android之在linux终端执行shell脚本直接打印当前运行app的日志
1.问题 我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是 1).获取包名 打开当前运行的app,然后输入如下命令,然后在第一行TASK后面的就可以看到包名 a ...
- Unity Profiler CPU Usage(CPU使用情况)
在Profiler界面点击左侧CPU Usage,Profiler界面下方Hierarchy窗口会列出各个函数对当前CPU的耗时,从大到小排序. 然后分析,各个函数的耗时是否异常,分析有没有可以优化的 ...
- [JAVA] Android用到的一些文件操作
// 获得某个文件夹folderPath下面某种文件后缀fileType的所有文件名 public static List<String> getFileNamesInFolder(Str ...
- 记一款bug管理系统(bugdone.cn)的开发过程(4) - 新增BugTalk功能
测试人员提出一个Bug,如果开发人员对Bug有疑义,会直接面对面讨论或者通过QQ等线上聊天工具讨论,但过后再去找讨论记录会很麻烦.因此BugDone提出一个全新的概念:将问题的讨论留在问题内.BugD ...
- LeetCode题解之Merge Two Sorted Lists
1.题目描述 2.题目分析 题目要求合并有序的两个链表,要求不能额外申请空间. 3.代码 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { i ...
- jmeter之数据库相关
一.JDBC Connection Configuration 1.Variable Name Bound to Pool-Variable Name:连接池名称, JDBC Request通过此名称 ...
- JBoss 7 里一个EJB依赖其他jar的几种方式
JBoss 7 与之前的版本有了巨大的变化,最核心的类的加载方式变了,有点类似OSGI那样搞起来了分模块的类加载方式,而不是以前的分层类加载.按以前的类加载方式,在加载树底下的那些类,总是能看到父节点 ...
- Percona MySQL5.7内存OOM案例导致重启的memory和thread分析
前言 在一个阳光明媚的下午,电脑右下角传来一片片邮件提醒,同时伴随着微信钉钉的震动,打开一看,应用各种出错,天兔告警,数据库服务器内存爆红,Mysql数据库实例挂掉了. 排查 先交代一下数据库版本: ...
- 理解lua中 . : self
前言 在LUA中,经常可以看到:. self,如果你学习过Java或C#语言,可以这样理解 .对于c#和java的静态方法 :相当于是实例方法 今天在CSDN上看到一篇博客写的很清楚,转载过来 原文出 ...
- Active Directory、Exchange、单点登录,企业账号统一管理解决方案
现在的公司一般都会有很多内部管理系统,比如OA.ERP.CRM.邮件系统等.员工入职之后如果每个系统都创建一个账号和密码,首先员工记系统账号就是一件非常头疼的事情,如果公司有一百个系统那就得创建一百个 ...