用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 = "com\sun\java\swing\plaf\gtk\*.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:\build里面,將JAVA_HOME/jre/lib/rt.jar文件也拷到d:\build里,並且解壓到一個叫rt目錄里面,在命令行里面輸入如下命令,然后運行:

當運行結束后,在d:\bulid目錄里面會增加另一個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:\rt_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下載

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM