zoukankan      html  css  js  c++  java
  • 用ant重新编译jdk加入调试信息

    (文章后面提供了ant和build.xml打包之后的build.zip下载,解压build.zip,然后将apache-ant-1.9.2-bin.zip解压即完成了ant安装,也可到http://ant.apache.org/bindownload.cgi下载widnows平台下的zip压缩包)

    当用eclipse调试jdk源码的时候,会发现里面的局部变量的值无法看到,这是因为sun在编译jdk的时候,没有加入调试信息。下面就介绍用ant如何重新编译jdk,加入调试信息。

    首先,要安装ant,设置环境变量ANT_HOME。如果ant的根目录在d:ant那么ANT_HOME就设置为d:Ant192。之后,按照图片上的显示输入命令,如果出现同样信息,说明ant安装成功。

    接下来是编写build.xml文件,build.xml文件如下:

    <?xml version = "1.0" encoding = "UTF-8" ?>
    <project name="create rt_debug.jar" default="makejar" basedir=".">
     
        <!--  初始化任务  -->
        <target name="init">
            <tstamp/>
            <property environment="env"/>
            <property name="project.build" location="build"/>
            <property name="project.src" location="${project.build}/src"/>
            <property name="project.classes" location="${project.build}/classes"/>
            <property name="project.dist" location="${project.build}/dist"/>
            <property name="project.classesJarRoot" location = "rt" />
            <property name="debuglevel" value="source,lines,vars" />
            <path id="project.classpath">
                <pathelement location = "${project.classesJarRoot}" />
            </path>
        </target>
     
        <!--  删除任务 -->
        <target name="clean" depends="init">
            <delete dir="${project.build}" quiet="true"/>
            <mkdir dir="${project.build}"/>
        </target>
     
       <!--  加压JAVA_HOME/src.zip -->
        <target name="unpack" depends="init, clean">
            <unzip src="${env.JAVA_HOME}/src.zip" dest="${project.src}"/>   
        </target>
     
        <!-- 通过javac重新编译源文件  -->
        <target name="build" depends="unpack">
            <mkdir dir="${project.classes}"/>
            <javac srcdir="${project.src}" classpathref="project.classpath"
                destdir="${project.classes}" debug="on" 
                fork="true" memoryMaximumSize="512m" failonerror="false" nowarn = "true" debuglevel = "${debuglevel}">
                <!-- talk to the hand troublesome libs -->
                <exclude name="org/apache/xpath/domapi/XPath*.java"/>
                <exclude name="com/sun/corba/se/internal/Interceptors/Thread*.java"/>    
                <exclude name = "comsunjavaswingplafgtk*.java" />
            </javac>
        </target>
     
        <!--  打包编译好的class文件到rt_debug.jar中 -->
        <target name="makejar" depends="build">
            <mkdir dir="${project.dist}"/>
            <copy file="${env.JAVA_HOME}/jre/lib/rt.jar" tofile="${project.dist}/rt_debug.jar"/>
            <jar jarfile="${project.dist}/rt_debug.jar" update="true" compress="false">
                <fileset dir="${project.classes}"/>
            </jar>
        </target>
     
    </project>

    这里要求已经设置好JAVA_HOME(即安装的jdk的根目录,如果jdk安装在d:java,那么JAVA_HOME就设置为d:java)。把build.xml文件放在比如d:uild里面,将JAVA_HOME/jre/lib/rt.jar文件也拷到d:uild里,并且解压到一个叫rt目录里面,在命令行里面输入如下命令,然后运行:

    当运行结束后,在d:ulid目录里面会增加另一个build个目录,一个log.txt文件。log.txt是打印的日志文件,里面存储了编译jdk的一些信息,可能有很多警告,但是只要没有编译错误,可以不用理会。而build目录里面还有3个目录,分别是src目录,存储解压于JAVA_HOME/src.zip的java源码,classes目录存放重新编译之后的class文件,dist目录,存放将重新编译后的class打包的rt_debug.jar文件。这个rt_debug.jar文件,就是加入了调试信息后的jar文件。

    下面在eclipse里面引入这个jar文件,假定将刚才的rt_debug.jar文件拷贝到d: t_debug下面,打开eclipse,然后选择Window->Preferences->Java->Installed JRES,出现如下界面:

    然后再界面右边Installed JREs列表里面选择一个jre,点击Edit按钮,如下图:

    当点击Edit按钮之后,会出现如下界面:

    在上面界面中点击Add External JARs...按钮,刚才生成的rt_debug.jar,并且一定要注意,保证rt_debug.jar在原始的rt.jar的前面(在加入rt_debug.jar后,选择rt_debug.jar,通过上面界面右边的Up按钮移动即可)。最终的结果如下图:

    点击Finish按钮,完成之后,新建一个工程,试着调试进入jdk源码,将鼠标放在源码里面的局部变量里面,看是否可以看见局部变量的值。

    build.zip下载

  • 相关阅读:
    腾讯课堂目标2017高中数学联赛基础班-2作业题解答-1
    腾讯课堂目标2017初中数学联赛集训队作业题解答-1
    2016猿辅导初中数学竞赛基础特训营作业题
    Markdown的基本语法
    解决网络图片加载出现403错误
    深入理解JS引擎的执行机制
    vue中moment.js的使用
    js中字符串 stringObject 的 replace() 方法
    Object.keys()方法
    webpack的require.context()实现路由“去中心化”管理
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/3416987.html
Copyright © 2011-2022 走看看