`
zhaohaolin
  • 浏览: 983967 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

调试jdk中的源码,查看jdk局部变量

    博客分类:
  • JAVA
阅读更多

调试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

 

分享到:
评论

相关推荐

    自己重新编译的jdk源码jar包

    但是默认的情况下eclipse是不支持进入jdk源码中进行调试和显示当前变量的。 我们要明白在jdk中,sun对rt.jar中的类编译时,去除了调试信息,这样在eclipse中就不能看到局部变量的值。这样的话,如果在debug的时候查看...

    jdk1.8.0_66 debug源码,查看局部变量

    用eclipse去debug jdk源码,默认情况下是看不到局部变量的。把这个生成的rt_debug.jar包复制到JDK_HOME\jre\lib\endorsed。如果没有endorsed目录,自己创建一下。 如果你是在eclipse中debug的。点击Eclipse上方窗口...

    jdk1.8.0_101调试包

    解决调试jdk源码时局部变量值看不到问题,下载后把此包加入JAVA_HOME\jre\lib\endorsed下并把词包导入eclipse中即可进行调试了。

    java查看sun包源码-rt_debug:将jdk的源码进行重新编译,用于局部变量的调试

    jdk提供的rt.jar进行debug调试时不能查看到局部变量的值,这是因为sun对rt.jar的类编译时,去除了调试信息,所以我们必须重新编译jdk源码并打包成rt.jar 编译步骤 解压jdk安装目录下的src.zip文件 遍历src目录下的...

    jdk_api_1.8-JAVA中文版API手册

    5)我们可以直接在lambda表达式中访问外层的局部变量。 2.适用人群 英语阅读能力较弱、喜欢阅读中文文档,对jdk源码原生api感兴趣的人。 3.适用场景 适用初学、工作中翻阅等 4.其他说明 不可随意传播哦

    jdk1.8版本的安装包

    我们可以直接在lambda表达式中访问外层的局部变量。 JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – 文档生成器,从源码注释中提取文档 ...

    JDK10官方包64位(Windows)

    JEP 286: 局部变量的类型推断。该特性在社区讨论了很久并做了调查,可查看 JEP 286 调查结果 JEP 296: 将 JDK 的多个代码仓库合并到一个储存库中  JEP 304: 垃圾收集器接口。通过引入一个干净的垃圾收集器(GC)...

    jdk8u361 x86 rpm包

    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA...我们可以直接在lambda表达式中访问外层的局部变量。

    jdk8u361 arm64 rpm包

    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA...我们可以直接在lambda表达式中访问外层的局部变量。

    Java jdk 1.8 API

    java API分享,用于查看Java方法类等有关属性,最近在学习java 并发相关的知识, 调试中进入到并发包中的源码,发现不能查看到局部变量表相关的信息. 在网上查询了下资料, 据说是oracle 对外发布jdk 安装包中lib 库做...

    rt_debug.jar

    将 rt_debug.jar 包复制到 jdk 根目录\jre\lib\endorsed 下,如果没有 endorsed 目录,手动创建即可。重启eclipse,调试jdk源码,即可显示局部变量信息

    javaclass和源码-deep-in-jvm:简单的借助jdk中的内置工具帮助我们对比Java源码和生成的字节码以及探究Class文件字节

    编译生成LocalVariableTable(局部变量表) 运行javap分析Class文件字节码 javap -verbose Main > Main.bytecode 分析包含内部类的源码编译出的Class文件 javap -verbose 'Main$Box.class' > 'Main$Box.bytecode'

    对ThreadLocal的理解【源码分析+应用举例】

    一、简介 ThreadLocal是JDK包提供的,它提供了线程本地变量,也就是如果你创建...ThreadLocal设计初衷:提供线程内部的局部变量,在本线程内随时随地可取,隔离其他线程。 根据源码,画出ThreadLocal原理图 原创文章

    想自己写框架?不了解Java注解(Annotation)机制可不行,来跟我一起通过源码深入Java注解机制

    它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 在JDK中定义了许多注解,其作用大致可以分为以下几类: 编写文档:通过代码里标识的元数据生成文档【生成文档doc文档...

    java基础案例与开发详解案例源码全

    8.1.2 局部内部类206 8.1.3 静态内部类209 8.1.4 匿名内部类211 8.2 对象包装器213 8.3 装箱和拆箱216 8.4 本章习题218 第9章 9.1 String类220 9.1.1 字符串常量221 9.1.2 字符串对象操作224 9.1.3 字符串对象修改...

    Java虚拟机

    1.6.1 获取JDK源码 1.6.2 系统需求 1.6.3 构建编译环境 1.6.4 进行编译 1.6.5 在IDE工具中进行源码调试 1.7 本章小结 第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常 2.1 概述 2.2 运行时...

    JAVA--达内培训笔记

    JAVA--达内培训笔记】 1、Java之父Golsling ...11、局部变量:定义在方法中的变量 (1)先赋值后使用 (2)从定义变量的代码块开始到代码块结束 (3)在同一范围内不允许两个局部变量发生命名冲突 * * * *

    个人博客源码java-Java11VarLambda:在个人博客(http://bit.ly/Java11Ft1)上发布的Java11源代码示

    11速览:局部变量类型推断(var)扩展到Lambda表达式参数 我的博客文章中的示例的Gradle源代码存储库。 在Linux Mint(SUSE Linux)上构建和测试。 平台 任何支持Java SE 11+的JVM的组件。 要求 Gradle4.7 Java 11或...

    java范例开发大全(pdf&源码)

    实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 我的钱...

Global site tag (gtag.js) - Google Analytics