Debug JDK原始碼沒變數值怎麼辦?
對於程式員而言,閱讀原始碼是一個非常重要的能力,相信Java程式設計師最常看的就是JDK的原始碼了,但有時候我們想具體看看原始碼在執行時某個變數的值,就會發現Debug時看不到變數的值,這是因為官方在編譯 rt.jar 中的類的時候去除了除錯資訊,那麼該怎麼辦呢?
有兩種辦法:一種是去網上找編譯好有除錯資訊的 rt.jar,另一種是自己去編譯JDK原始碼,下面就是自己編譯的詳細過程,希望大家第一次不要怕麻煩,跟著做,弄好之後以後除錯就非常方便了
問題效果圖:
解決後的效果:
具體步驟:
1.製作 可除錯的 rt.jar 包
1.1 .在D盤新建jdk7_src及jdk7_rt-debug兩個資料夾
1.2.複製JDK原始碼
將環境變數中配置的java_home地址或者將用的外部JDK安裝目錄下的src.zip
複製到D:/jdk7_src,解壓.效果如下圖
1.3.選擇要編譯的原始碼
原文中說,留下Java,javax,org三個資料夾就足夠了,其他都可以刪除。
我只是把swing的內容刪除了,其他都留下了。大夥可以隨意。
swing包目錄位置:com\sun\java\swing,javax\swing
1.4.得到要處理的java檔名
命令及效果圖如下:
要檢視一下,自動生成的filelist.txt中是否有內容哦 ,沒有資料的話下面的操作是沒用的。
d:
cd jdk7_src
dir /B /S /X *.java>filelist.txt
1.5.複製jre/lib/rt.jar
把JDK安裝目錄(複製src.zip的那個目錄)下jre/lib下的rt.jar複製到jdk7_src目錄下
1.6.生成一些可除錯的class資料夾
執行如下命令,成功後,jdk7_rt-debug資料夾會產生一些可除錯的class資料夾,如下圖:
如果沒有,請開啟jdk7_src/log.txt,ctrl+F查詢“錯誤”,並解決。
一般,將報錯的java路徑及路徑對應的檔案刪除,再執行dir /B /S /X *.java > filelist.txt即可。
javac -J-Xms16m -J-Xmx1024m -sourcepath D:\jdk7_src -cp D:\jdk7_src\rt.jar -d D:\jdk7_rt-debug -g @filelist.txt >> log.txt 2>&1
1.7.將這些檔案打包成Jar
命令和效果如下圖
cd ..
cd jdk7_rt-debug
jar cf0 rt_debug.jar *
2.使用 可除錯的 rt.jar
2.1.把rt_debug.jar放入JDK中
放入java_home/jre/lib/endorsed目錄
2.2.將rt_debug.jar加入Eclipse使用的JDK中
2.3.新增rt_debug.jar的原始碼包
注意:若原來的JRE目錄下已經存在了rt.jar包,則要將新編譯的rt_debug.jar的位置在原來的jar包之前,如下圖所示。
2.4.開始debug吧,你成功了!!
原文釋出時間為:2018-11-20
本文作者:傻瓜不傻108
本文來自雲棲社群合作伙伴“ ofollow,noindex">趣談程式設計 ”,瞭解相關資訊可以關注“ 趣談程式設計 ”。