调试jdk中的源码,查看jdk局部变量
2012-04-24 22:02:13
学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。
可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。
废话少说,下面是编译jdk的具体步骤:
1.把C:\java\jdk1.6.0_10\src.zip解压到C:\java\jdk1.6.0_10\src
2.执行命令 dir /B /S /X C:\java\jdk1.6.0_10\src\*.java > fileList-jdk1.6.0_10-src.txt 生成一个包含所有源文件列表的txt文档
3.最重要的一步,运行以下命令
c:\Java\jdk1.6.0_10\bin\javac
-verbose
-nowarn
-g
-source 1.6
-target 1.6
-J-Xms512m
-J-Xmx1024m
-bootclasspath c:\Java\jre6\lib\rt.jar;c:\Java\jre6\lib\jce.jar;c:\Java\jre6\lib\jsse.jar;c:\Java\jre6\lib\resources.jar;c:\Java\jre6\lib\charsets.jar;c:\Java\jre6\lib\deploy.jar
-sourcepath c:\Java\jdk1.6.0_10\src
-classpath c:\Java\jdk1.6.0_10\src
-d compiled
@fileList-jdk1.6.0_14-src.txt
其中-d complied是要新建的文件夹,用来存放编译生成的class文件,@fileList-jdk1.6.0_14-src.txt就是刚才生成的文本文件,这个步骤大概要执行2-3分钟左右。
4. 执行完毕,所有新编译后的class文件都在complied文件夹中,重新打包生成rt.jar或者覆盖原来rt.jar中的类,生成新的rt.jar。最后把新生成的rt.jar放到c:\Java\jre6\lib和C:\java\jdk1.6.0_10\jre\lib覆盖原有的rt.jar,覆盖之前最好备份一下,这样就大功告成了。
需要说明的几点:
A. java最好安装在某盘的根目录下(如c:\Java\jdk1.6.0_10),不要放在program files下,因为这个文件夹名有个空格,执行javac命令时有可能产生不必要的麻烦。
B. 如果想在eclipse中跟踪调试,需要在Windows-Preferences-Java-Installed JRE下,选择安装的jdk,点edit,然后在列出的jre system libraries列表中选择rt.jar,设置其中的Source attachment为C:\java\jdk1.6.0_10\src.zip。
参考:http://www.softwareengineeringsolutions.com/thoughts/Java-Debug-Build.htm
可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。
废话少说,下面是编译jdk的具体步骤:
1.把C:\java\jdk1.6.0_10\src.zip解压到C:\java\jdk1.6.0_10\src
2.执行命令 dir /B /S /X C:\java\jdk1.6.0_10\src\*.java > fileList-jdk1.6.0_10-src.txt 生成一个包含所有源文件列表的txt文档
3.最重要的一步,运行以下命令
c:\Java\jdk1.6.0_10\bin\javac
-verbose
-nowarn
-g
-source 1.6
-target 1.6
-J-Xms512m
-J-Xmx1024m
-bootclasspath c:\Java\jre6\lib\rt.jar;c:\Java\jre6\lib\jce.jar;c:\Java\jre6\lib\jsse.jar;c:\Java\jre6\lib\resources.jar;c:\Java\jre6\lib\charsets.jar;c:\Java\jre6\lib\deploy.jar
-sourcepath c:\Java\jdk1.6.0_10\src
-classpath c:\Java\jdk1.6.0_10\src
-d compiled
@fileList-jdk1.6.0_14-src.txt
其中-d complied是要新建的文件夹,用来存放编译生成的class文件,@fileList-jdk1.6.0_14-src.txt就是刚才生成的文本文件,这个步骤大概要执行2-3分钟左右。
4. 执行完毕,所有新编译后的class文件都在complied文件夹中,重新打包生成rt.jar或者覆盖原来rt.jar中的类,生成新的rt.jar。最后把新生成的rt.jar放到c:\Java\jre6\lib和C:\java\jdk1.6.0_10\jre\lib覆盖原有的rt.jar,覆盖之前最好备份一下,这样就大功告成了。
需要说明的几点:
A. java最好安装在某盘的根目录下(如c:\Java\jdk1.6.0_10),不要放在program files下,因为这个文件夹名有个空格,执行javac命令时有可能产生不必要的麻烦。
B. 如果想在eclipse中跟踪调试,需要在Windows-Preferences-Java-Installed JRE下,选择安装的jdk,点edit,然后在列出的jre system libraries列表中选择rt.jar,设置其中的Source attachment为C:\java\jdk1.6.0_10\src.zip。
参考:http://www.softwareengineeringsolutions.com/thoughts/Java-Debug-Build.htm
相关推荐
但是默认的情况下eclipse是不支持进入jdk源码中进行调试和显示当前变量的。 我们要明白在jdk中,sun对rt.jar中的类编译时,去除了调试信息,这样在eclipse中就不能看到局部变量的值。这样的话,如果在debug的时候查看...
- **动态类型(Dynamic Type)**:`var`关键字的引入,允许在局部变量声明时推断类型,提高了代码的简洁性。 - **文本块(Text Blocks)**:JDK11引入了三引号(`"""`)表示的文本块,方便处理多行字符串,避免了转义...
用eclipse去debug jdk源码,默认情况下是看不到局部变量的。把这个生成的rt_debug.jar包复制到JDK_HOME\jre\lib\endorsed。如果没有endorsed目录,自己创建一下。 如果你是在eclipse中debug的。点击Eclipse上方窗口...
9. 类型推断增强:编译器可以自动推断局部变量的类型,简化了泛型使用。 总之,这个JDK 1.8的源码压缩包为开发者提供了一个深入了解Java语言及其运行机制的宝贵资源,无论是在学习、研究还是在实际开发中,都能从中...
1. **局部变量类型推断(Local-Variable Type Inference,也称作"Type Inference for Local Variables with var")**:JDK10引入了`var`关键字,允许编译器根据初始值自动推断局部变量的类型,简化代码并减少冗余。...
解决调试jdk源码时局部变量值看不到问题,下载后把此包加入JAVA_HOME\jre\lib\endorsed下并把词包导入eclipse中即可进行调试了。
jdk提供的rt.jar进行debug调试时不能查看到局部变量的值,这是因为sun对rt.jar的类编译时,去除了调试信息,所以我们必须重新编译jdk源码并打包成rt.jar 编译步骤 解压jdk安装目录下的src.zip文件 遍历src目录下的...
JDK1.8提高了类型推断的能力,使得局部变量的声明可以省略类型,由编译器自动推断,如: ```java var list = new ArrayList(); ``` 七、反射API改进 JDK1.8对反射API进行了优化,新增了`MethodHandle`和`...
5)我们可以直接在lambda表达式中访问外层的局部变量。 2.适用人群 英语阅读能力较弱、喜欢阅读中文文档,对jdk源码原生api感兴趣的人。 3.适用场景 适用初学、工作中翻阅等 4.其他说明 不可随意传播哦
堆存储对象实例,方法区存放类信息,程序计数器记录当前线程执行的指令地址,虚拟机栈保存每个方法的局部变量、操作数栈等,本地方法栈为JNI调用的本地方法服务。 3. 指令集:JVM使用一套基于栈的指令集,这些指令...
2. 在系统环境变量中创建或修改`JAVA_HOME`,将其值设为解压目录。 3. 如果`Path`变量已经存在,需在其末尾添加`%;%JAVA_HOME%\bin;`(Windows系统)或`:$(JAVA_HOME)/bin:`(Unix/Linux系统)。 **Java 7的主要...
2. **配置环境变量**:为了让系统能够识别并使用JDK,需要设置`JAVA_HOME`环境变量,指向JDK的根目录,并在`PATH`变量中添加`%JAVA_HOME%\bin`(对于Windows)或`$JAVA_HOME/bin`(对于Linux/Mac)。 3. **验证安装...
我们可以直接在lambda表达式中访问外层的局部变量。 JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – 文档生成器,从源码注释中提取文档 ...
JDK源码中经常看到在方法内部将成员变量赋值给局部变量,例如`int len1 = value.length;`。这样做是因为局部变量存储在栈中,访问速度较快,而成员变量存储在堆中。在方法中使用局部变量可以避免不必要的堆内存访问...
从JDK 5.0开始,编译器能够推断出局部变量的类型,这在使用匿名内部类或者泛型时特别有用,如:List<String> list = new ArrayList(); 这里的中的类型可以由编译器推断出来。 七、可变参数(Varargs) 可变参数允许...
5. **JEP 382:JDK源码树中的OpenJFX**:JavaFX现在已包含在JDK源码树中,简化了对图形用户界面开发的支持。 总结,JDK17在Windows 64位环境下为开发者提供了更高效、安全的开发体验。通过利用新特性,如密封类、...
4. **动态类型推断增强**:`var`关键字现在可以在局部变量声明中使用,即使在初始化表达式中没有明确的类型信息,编译器也能推断出类型。 5. **强引用API**:JDK 11引入了`java.lang.ref.Cleaner` API,提供了一种...
【标题】"jdk-7u80-windows-x64.exe" 指的是Java Development Kit (JDK) 的第7个...同时,安装完成后,还需要配置环境变量`JAVA_HOME`,将JDK的安装路径添加到`PATH`变量中,以确保系统可以在任何地方找到Java命令。
包括设置`JAVA_HOME`指向JDK安装目录,以及在`Path`变量中添加 `%JAVA_HOME%\bin`,确保系统能识别Java命令。 7. **验证安装**:通过在命令行输入`java -version`和`javac -version`,如果正确显示JDK版本信息,则...