天天看點

JDK源碼調試

1.首先遇到了一個問題line unavailable,然後通過以下方式解決:

http://blog.csdn.net/xuefeng0707/article/details/8738869

 對于想了解JDK源碼的同學來說,通過調試JDK源碼來學習是一個常用的方法。

如果調試時,不能進入JDK源碼,大部分錯誤都是line unavailable,則需要設定一番。

【Window】-【Preference】-【Java】-【Installed JREs】

這裡可以看到Eclipse可以使用的Java環境,預設使用的是JRE(Java Runtime Environment),是不支援調試的,需要替換成JDK(Java Development Kit)。

有事候需要重新remove原來的jre候重新添加一下jdk中的就可以了。

2.後來遇到了問題是:解決Debug JDK source 無法檢視局部變量的問題方案(重新編譯rt.jar包)

 用Eclipse Debug,當跟蹤進jdk api裡時(比如javax.swing包裡的類),無法檢視某些local filed的值。這是因為jdk裡的代碼在打包時删除了一些用于調試的資訊,以減小安裝包的體積。不過可以通過重新編譯jdk源代碼來恢複此功能。

http://www.cnblogs.com/zjrodger/p/5110538.html

【原】解決Debug JDK source 無法檢視局部變量的問題方案(重新編譯rt.jar包)

一.問題闡述

  首先我們要明白JDK source為什麼在debug的時候無法觀察局部變量,因為在jdk中,sun對rt.jar中的類編譯時,去除了調試資訊,這樣在eclipse中就不能看到局部變量的值。

這樣的話,如果在debug的時候檢視局部變量,就必須自己編譯相應的源碼使之擁有調試資訊。

要達到這個目的,一是找網上人家已經編譯好的版本,剩下的隻能自己去編譯。

下面我們對于自己編譯提供一個方法,希望對大家有所幫助,如果有什麼問題,請留言。

二.解決方案

1、選擇或建立你的工作目錄,比如我選擇:E:\

2、在你的工作目錄中,建立檔案夾jdk_src,用于存放源碼;建立檔案夾jdk_debug,用于輸出編譯結果。

3、從你的機器裝jdk的地方找到src.zip,在你得JDK_HOME可以找到,比如我的在C:\Program Files\Java\jdk1.7.0_09目錄下。然後把src解壓到jdk_src目錄下。

4、解壓完後,選擇你需要編譯的内容,删除剩下的。一般選擇如下的幾個檔案夾就可以了:java javax org 這三個目錄就可以了啊

5、從你的JDK_HOMME\jre\lib中複制rt.jar到你的工作目錄中(即E:\),這樣做的目的可以讓你減少在指令行中輸入的檔案名。

6、執行如下這條指令:

dir /B /S /X jdk_src\*.java > filelist.txt      

  建立一個叫做filelist.txt的檔案,這個檔案存放了所有你将要編譯的類的名稱。

7、執行如下的指令:

javac -J-Xms16m -J-Xmx1024m -sourcepath e:\jdk_src -cp e:\rt.jar -d e:\jdk_debug -g @filelist.txt >> log.txt 2>&1      

  這條指令将要編譯所有你指定的檔案,并把編譯結果輸出到jdk_debug目錄中,同時産生log.txt日記檔案。這個日記檔案記錄着編譯警告,但是沒有錯誤。

8、進入到jdk_debug目錄中,輸入如下指令:

jar cf0 rt_debug.jar *        

  這個指令可以生成我們需要的rt.jar帶編譯資訊的jar包。

9、把這個生成的rt_debug.jar包複制到JDK_HOME\jre\lib\endorsed。如果沒有endorsed目錄,自己建立一下。

10、如果你是在eclipse中debug的。點選Window->Installed JRES,選擇相應的JDK,點選Edit,r然後選擇點選Add External jars,選擇我們步驟9中目中的rt_debug.jar,就可以了。

注意:若原來的JRE目錄下已經存在了rt.jar包,則要将新編譯的rt_debug.jar的位置在原來的jar包之前,如下圖所示。

JDK源碼調試

現在完成了所有的步驟了,趕快嘗試debug一下,如果可以檢視局部變量了,那麼恭喜你成功了。

三.參考文獻

1、原文連結:http://blog.csdn.net/appleprince88/article/details/21873807

2、debug jdk source can\'t watch variable what it is

http://stackoverflow.com/questions/18255474/debug-jdk-source-cant-watch-variable-what-it-is

原文位址: