解決debug到jdk原始碼時不能檢視變數值的問題
目錄
如何跟蹤jdk原始碼
看到這個標題大概大家都會在心裡想誰還跟蹤個原始碼呀,在eclipse中打個斷點,以debug的方式執行,然後F5進入方法,F6跳過方法,F7跳出方法。但是不知道大家有沒有注意到,如果你跟蹤到的是jdk原始碼的話,比如 HashMap
的 put
方法, 即使你F5進入到這個方法的內部了,你也看不到你put的 key 和 value 的實際值。 但是我們既然要跟蹤原始碼,那麼肯定要看到我們設定的 key 和 value 是如何歷經九九八十一難才進入到 HashMap
這個桶之中的。為什麼說是桶,大家有興趣的可以自己去深入瞭解一下HashMap,這裡我就不做過多的介紹了。
這是我們跟蹤原始碼看到的情況:
這是我們想要看到的情況:
接下來就是今天的正題了
1、 編譯原始碼
1.1 、簡單介紹
首先我們要知道一個jar也就是 rt.jar
, 它是JAVA基礎類庫,也就是你在java doc裡面看到的所有的類的class檔案,但是 orcale
在編譯jdk原始碼的時候為了減小jar包的大小,使用的是 javac -g:none
也就是不帶任何的除錯資訊。 這就是我們跟蹤jdk原始碼但是看不到變數值的罪魁禍首,但是上帝在給你關了一扇門的同時也會給你開一扇窗的。那麼我現在就來帶你一下這扇窗是怎麼開啟的。
上面這張圖是jdk安裝目錄,可以看到這個有個 src.zip
,它就是今天的主角:jdk原始碼,你可以把它解壓出來看一下里面的內容,其實就是一個個的java類。
1.2、 開始編譯原始碼
- 我們需要將它解壓出來,至於放在哪裡看你心情,只要你能找得到就可以了,因為我們它是我們今天的重頭戲。解壓出來就是下面這些東西
- 開啟eclipse新建一個java工程,命名也看你心情。
- 將第一步解壓出來的那6個資料夾全部複製到你工程下的src中(其實不需要全部,有些是可以刪除的,但是為了省事就全部都複製進去好了。)
- 其中有報錯,但是你不用管,你只需要等到eclipse將這個工程編譯完成後將其匯出為jar檔案。選中
src-->右鍵-->選擇Export
- 取好你的名字,選擇放到哪裡,然後
Finish
就可以了。至此我們就完成第一步了。
2、 關聯原始碼
- 在你的eclipse的工具欄選擇
window-->preferences
,找到Installed JREs
, 選擇你使用的jdk點選Edit
進行編輯。
- 在編輯視窗點選
Add External JARs
選擇我們剛剛編譯好匯出的那個jar包。
-
紅色的jar就是我們自己匯出的jar,我們要將我們匯出的jar往上移,移到藍色的
rt.jar
上面。然後Finish
-
將我們編譯的jar和src.zip進行關聯。選擇
JRE System Library
找到裡面我們編譯的jar, 右鍵-->Propertites。
- 在
Propertites
選擇External File...
找到我們最開始的src.zip並選擇它。然後Aplly
ok
。一切結束。
3、 大功告成
現在你就可以愉快的跟蹤原始碼,看看你的變數是怎麼在 java
的世界中遨遊了。