調試JDK源碼,無法追蹤顯示局部變量的解決方案

  • 什麼原因導致我們無法調試源碼的時候無法追蹤局部變量的值?

    1.因爲在我們通常在oracle官網下載的jdk源碼包的時候,官網默認對rt.jar中類編譯的時候,默認去除了調試信息,使得jar包的體積變得較小,因此我們在本地調試jdk源碼的時候不會顯示局部變量的值

    2.我們看一下現象:
    這裏寫圖片描述
    從圖中可以看出,局部變量值不可獲得
    3.解決方案很明顯了,我們只要手動重新編譯一下jdk的源碼包,帶上調試信息即可

  • 解決方案-windows系統

    1.首先我們找到jdk的根目錄,進入找到源碼包src.jar,解壓該文件,一般我們只需要調試java,javax,org三個目錄下的源碼,如果你需要調試其他包下面的源碼,請保留相應目錄,刪除剩餘目錄即可。解壓後的路徑爲:jdk根目錄/jdk_src

    2.打開命令行,進入到jdk根目錄,鍵入:
    dir /B /S /X jdk_src*.java > filelist.txt //目的是列出我們剛剛解壓出的所有java文件絕對路徑清單

    3.重新編譯我們需要的源碼,加入調試信息,首先進入jdk根目錄,創建jdk_debug目錄,打開命令行,進入到jdk根目錄,鍵入:
    javac -J-Xms16m -J-Xmx1024m -sourcepath jdk_src -cp jre\lib\rt.jar -d jdk_debug -g @filelist.txt >>log.txt 2>&1 //這裏需要注意,我們需要用當前版本jdk的去編譯,不要跨版本編譯(eg.1.7去編譯1.8的jdk),命令大致解釋如下:我們編譯剛剛在jdk_src目錄下列在filelist中的java類到jdk_debug目錄下,並把輸出日誌打在log.txt文件中

    4.在jdk_debug目錄下打開命令行,鍵入:
    jar cf0 rt_debug.jar * 打包該目錄下的文件到rt_debug.jar

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

    6.再去嘗試調試源碼,發現局部變量可以追蹤了

  • 解決方案-mac系統

    1.方法類似相同,只有第二點有區別,鍵入:
    ls -R ./jdk_src -R|sed s#^#pwd# |grep ‘.java$’ >filelist.txt

  • 備註

    1.intellij idea 15.*以上的版本默認支持局部變量的debug追蹤功能,可以不進行jdk源碼的重新編譯

    參考資料:
    (http://stackoverflow.com/questions/18255474/debug-jdk-source-cant-watch-variable-what-it-is)
    (http://blog.csdn.net/appleprince88/article/details/21873807)

轉載請申明出處

發佈了6 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章