解决调试JDK源码时,不能查看变量的值问题
前几天本来想以debug模式看一下JDK的源码,进入调试模式时才发现,根本看不到方法里面变量值的情况。为什么呢?JDK现在的版本中,编译过后,去除了里面的调试信息。解决办法是,编译那些类,使其带有调试信息,使用命令:javac -g
查看了一些相关资料,现将解决方法放到下面
1、在d:\的根目录下创建jdk7_src和jdk_debug目录。
2、在JDK_HOME目录下找到src.zip文件,并把它里面的文件解压到jdk7_src目录下,然后在解压后的目录中删除除了java、javax、org以外的其他目录。
3、把JDK_HOME\jre\lib下的rt.jar放到你的工作目录下,即d:\的根目录下(这样仅仅便于在命令行中不用指定大量的文件名)。
4、执行命令dir /B /S /X jdk7_src\*.java > filelist.txt 去创建需要编译的java文件列表,用于javac命令编译的输入源文件,dir命令相关参数说明,/B: 不输出额外的文件信息(没有标题信息或摘要),/S: 显示指定目录和所有子目录中的文件,/X: 显示为非 8.3 文件名产生的短名称。格式是 /N 的格式, 短名称插在长名称前面。如果没有短名称,在其位置则显示空白。
5、执行javac -J-Xms16m -J-Xmx1024m -sourcepath d:\jdk7_src -cp d:\rt.jar -d d:\jdk_debug -g @filelist.txt >> log.txt 2>&1 编译后的文件将放入jdk_debug文件夹,编译产生的日志将存到log.txt文件中。在日志文件中将看到大量的警告,但是没有错误信息。
6、进入jdk_debug目录执行命令jar cf0 rt_debug.jar *,将编译后的文件打包成rt_debug.jar包。
7、把新生成的jar包放到JDK_HOME\jre\lib\endorsed中(如果没有endorsed文件夹,则手动创建)。
说明:JDK_HOME表示JDK的安装路径,本文所有的命令都在在d:\下及其子目录下执行的。
简单点,也可以将我下面提供的JDK7的调试版本的rt_debug.jar放入endorsed文件夹中。
以上这篇解决调试JDK源码时,不能查看变量的值问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
解决java 查看JDK中底层源码的实现方法
1.点 "window"-> "Preferences" -> "Java" -> "Installed JRES"2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)3.选中rt.jar文件的这一项:"c:\program files\ja
-
解决调试JDK源码时,不能查看变量的值问题
前几天本来想以debug模式看一下JDK的源码,进入调试模式时才发现,根本看不到方法里面变量值的情况.为什么呢?JDK现在的版本中,编译过后,去除了里面的调试信息.解决办法是,编译那些类,使其带有调试信息,使用命令:javac -g 查看了一些相关资料,现将解决方法放到下面 1.在d:\的根目录下创建jdk7_src和jdk_debug目录. 2.在JDK_HOME目录下找到src.zip文件,并把它里面的文件解压到jdk7_src目录下,然后在解压后的目录中删除除了java.javax.org
-
jdk源码阅读Collection详解
见过一句夸张的话,叫做"没有阅读过jdk源码的人不算学过java".从今天起开始精读源码.而适合精读的源码无非就是java.io,.util和.lang包下的类. 面试题中对于集合的考察还是比较多的,所以我就先从集合的源码开始看起. (一)首先是Collection接口. Collection是所有collection类的根接口;Collection继承了Iterable,即所有的Collection中的类都能使用foreach方法. /** * Collection是所有collec
-
JDK源码分析之String、StringBuilder和StringBuffer
前言 本文主要介绍了关于JDK源码分析之String.StringBuilder和StringBuffer的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 String类的申明 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {-} String类用了final修饰符,表示它不可以被继承,同时还实现了三个接口, 实现Serializa
-
最通俗的白话讲解JDK源码中的ThreadLocal
目录 引言 ThreadLocal是什么?它能干什么? ThreadLocal实现线程隔离的秘密 为什么ThreadLocal会出现OOM的问题? 内存泄漏演示 内存泄漏问题分析 父子线程的参数传递 总结 引言 其实网上有很多关于ThreadLocal的文章了,有不少文章也已经写的非常好了.但是很多同学反应还有一些部分没有讲解的十分清楚,还是有一定的疑惑没有想的十分清楚.因此本文主要结合常见的一些疑问.ThreadLocal源码.应用实例以注意事项来全面而深入地再详细讲解一遍ThreadLoca
-
JDK源码白话解读之ThreadLocal篇
目录 引言 ThreadLocal是什么?它能干什么? ThreadLocal实现线程隔离的秘密 为什么ThreadLocal会出现OOM的问题? 内存泄漏演示 内存泄漏问题分析 父子线程的参数传递 总结 引言 因此本文主要结合常见的一些疑问.ThreadLocal源码.应用实例以注意事项来全面而深入地再详细讲解一遍ThreadLocal.希望大家看完本文后可以彻底掌握ThreadLocal. ThreadLocal是什么?它能干什么? 在阐述ThreadLocal之前,我们先来看下它的设计者是
-
通过JDK源码角度分析Long类详解
概况 Java的Long类主要的作用就是对基本类型long进行封装,提供了一些处理long类型的方法,比如long到String类型的转换方法或String类型到long类型的转换方法,当然也包含与其他类型之间的转换方法.除此之外还有一些位相关的操作. Java long数据类型 long数据类型是64位有符号的Java原始数据类型.当对整数的计算结果可能超出int数据类型的范围时使用. long数据类型范围是-9,223,372,036,854,775,808至9,223,372,036,85
-
Java从JDK源码角度对Object进行实例分析
Object是所有类的父类,也就是说java中所有的类都是直接或者间接继承自Object类.比如你随便创建一个classA,虽然没有明说,但默认是extendsObject的. 后面的三个点"..."表示可以接受若干不确定数量的参数.老的写法是Objectargs[]这样,但新版本的java中推荐使用...来表示.例如 publicvoidgetSomething(String...strings)(){} object是java中所有类的父类,也就是说所有的类,不管是自己创建的类还是
-
JDK源码中一些实用的“小技巧”总结
前言 这段时间比较闲,就看起了jdk源码.一般的一个高级开发工程师, 能阅读一些源码对自己的提升还是蛮大的.本文总结了一些JDK源码中的"小技巧",分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1 i++ vs i-- String源码的第985行,equals方法中 while (n--!= 0) { if (v1[i] != v2[i]) return false; i++; } 这段代码是用于判断字符串是否相等,但有个奇怪地方是用了i--!=0来做判断,我们通
-
分析HashMap 的 JDK 源码
缘由:今天好友拿着下面的代码,问我为什么 Map.Entry 这个接口没有实现 getKey() 和 getValue() 方法,却可以使用,由此,开启了一番查阅 JDK 源码的旅途-. Map map = new HashMap(); map.put(1, "张三"); map.put(2, "李四"); map.put(3, "王五"); map.put(4, "赵六"); map.put(5, "钱七"
-
JDK源码之线程并发协调神器CountDownLatch和CyclicBarrier详解
目录 引言 CountDownLatch 使用场景 底层实现原理 初始化 计数器递减 阻塞线程 CyclicBarrier 使用场景 底层实现原理 初始化 阻塞等待 总结 引言 那么在程序的世界中是如何对这种协调关系进行描述的呢?今天就和大家聊聊Java大神Doug Lea在并发包中如何通过CountDownLatch和CyclicBarrier实现任务协调的代码描述. CountDownLatch 我相信大家都知道好代码的一个重要特性就是代码中类.变量等的命名可以做到顾名思义,也就是说看到命名
随机推荐
- javascript面向对象入门基础详细介绍
- 详解10分钟学会vue滚动行为
- angular.js4使用 RxJS 处理多个 Http 请求
- java Hibernate延迟加载
- JavaScript实现自动变换表格边框颜色
- blog程序新版本V2.0 Beta完成,提供V1.0全部源码下载
- 配置支持SSI
- CentOS下使用yum安装python-pip失败的完美解决方法
- jQuery+CSS3文字跑马灯特效的简单实现
- 如何解决Mybatis--java.lang.IllegalArgumentException: Result Maps collection already contains value for X
- Sql Server 索引使用情况及优化的相关Sql语句分享
- 金山反病毒20050103_周报
- 在Python中使用全局日志时需要注意的问题
- 实例解析Java单例模式编程中对抽象工厂模式的运用
- 解析Java的Spring框架的基本结构
- 基于javascript实现彩票随机数生成(简单版)
- vue使用jsonp抓取qq音乐数据的方法
- asp net core 2.1中如何使用jwt(从原理到精通)
- 用ES6写全屏滚动插件的示例代码
- OC runtime学习笔记之关联对象