1. 程式人生 > >設置Eclipse可以Debug模式調試JDK源碼,並顯示局部變量的1

設置Eclipse可以Debug模式調試JDK源碼,並顯示局部變量的1

一個 拖拽 切換目錄 常用 res detail sdn 路徑 cep

最近突然萌發了研究JDK源碼的想法,所以就想到了在自己常用的Eclipse上可以調試JDK源碼。

整個設置過程也很簡單:

技術分享

首先你要安裝好JDK(我的JDK安裝路徑根目錄是D:\Java\jdk-8u92-windows-x64),JDK安裝路徑裏有個“src.zip”就是JDK的源碼文件壓縮包;

技術分享

設置好環境變量的JAVA_HOME變量和PATH變量(JAVA_HOME變量值也是D:\Java\jdk-8u92-windows-x64)。

然後打開Eclipse設置可以Debug模式調試JDK源碼:

技術分享

1 打開Eclipse的菜單欄Windows->Preferences:點開Java

->Installed JREs,點擊Add->Standard VMJRE home就填寫你環境變量裏的%JAVA_HOME%路徑(我的%JAVA_HOME%是D:\Java\jdk-8u92-windows-x64);

2 在JRE system libraries可以看到JDK源碼的相關JAR包,點開某個JAR(如D:\Java\jdk-8u92-windows-x64\jre\lib\resources.jar、D:\Java\jdk-8u92-windows-x64\jre\lib\rt.jar……),可以看到“Source attachment:(none)”,點擊右側的“Source attachment…”選擇External location->Path通過路徑指向JDK源碼文件壓縮包%JAVA_HOME%\src.zip

通過上面兩步設置,就有了一個可以調試JDK源碼的JRE了。

只需把項目的JRE指定為這個設置好的JRE,就可以調試JDK源碼。

通過上面的設置,雖然調試可以進入到JDK源碼,但是你會發現JDK源碼的方法的傳入參數和方法體裏的局部變量是無法顯示值的。

那是因為JRE的JAR包為了節省文件大小,Oracle在編譯和打成JAR包時,去除了對變量值的顯示。

所以,我們需要重新編譯和打JAR包:

1 找一個空的文件夾作為工作空間根目錄,如E:\jdk,在裏面新建兩個文件夾“jdk_src”和“jdk_debug”;其中“jdk_src”用來存放待編譯的.java源碼文件,“jdk_debug

”用來存放編譯後的.class字節碼文件;

技術分享

2 到%JAVA_HOME%\jre\lib找到rt.jar,將它拷貝到工作空間 E:\jdk

技術分享

3 打開JDK源碼文件壓縮包%JAVA_HOME%\src.zip,把java、javax、org這三個文件夾,直接拖拽解壓到用來存放待編譯的.java源碼文件的E:\jdk\jdk_src文件夾;

4 運行CMD,執行如下指令:

4.1 切換目錄到工作空間CD E:\jdk;列出E:\jdk\jdk_src裏所有待編譯的.java源碼文件到filelist.txt:dir /B /S /X .\jdk_src\*.java > .\filelist.txt;完成後將會在E:\jdk生成一個filelist.txt,裏面列出了很多行**.java;

4.2 將jdk_src裏所有待編譯的.java源碼文件,編譯成.class字節碼文件,放到jdk_debug這個用來存放編譯後的.class字節碼文件的文件夾裏:javac -J-Xms16m -J-Xmx1024m -sourcepath .\jdk_src -cp .\rt.jar -d .\jdk_debug -g @.\filelist.txt >> .\log.txt 2>&1;編譯過程中將會在E:\jdk\生成編譯日誌文件log.txt,編譯完成後可以在E:\jdk\jdk_debug看到生成了相應的文件夾和.class字節碼文件;

4.3 切換目錄CD E:\jdk\jdk_debug,將.class字節碼文件打成JAR包:jar cf0 .\rt_debug.jar .\*;打包完成後將會在E:\jdk\jdk_debug生成rt_debug.jar。

中文參考文獻:http://blog.csdn.net/appleprince88/article/details/21873807

英文參考文獻:http://stackoverflow.com/questions/18255474/debug-jdk-source-cant-watch-variable-what-it-is

設置Eclipse可以Debug模式調試JDK源碼,並顯示局部變量的1