設置Eclipse可以Debug模式調試JDK源碼,並顯示局部變量的1
最近突然萌發了研究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
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
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