eclipse默認是無法調試JDK源代碼的,即使添加了src.zip 作爲source code也不能解析stack上的變量,只能看到類成員變量。
原因很簡單,JDK的源代碼是使用 javac -g:lines 參數進行編譯的,所以代碼裏面沒有所需的debug info。
解決方式也同樣簡單:重新編譯JDK的源代碼。
簡單寫了一個shell腳本,只要設置了 $JAVA_HOME 變量,就可以實現(不知道怎麼上傳附件,自己粘貼回去用吧,需要tools.jar 源代碼的類似原理)
- #!/bin/sh
- if [ -z "$JAVA_HOME" ]
- then
- echo "Must set JAVA_HOME"
- exit 1
- fi
- cd $JAVA_HOME
- mkdir temp
- cp src.zip temp/
- cd temp/
- mkdir out
- unzip src.zip
- rm src.zip
- find . -name *.java > filelist
- echo "$(wc -l filelist) java files to compile"
- javac -g -d out/ -J-Xmx1024m -cp "../jre/lib/tools.jar:../jre/lib/rt.jar" @filelist
- if [ $? != 0 ]
- then
- echo "compile error!"
- exit 1
- fi
- unzip $JAVA_HOME/jre/lib/rt.jar -d $JAVA_HOME/temp/old_classes
- cp -r $JAVA_HOME/temp/out/* $JAVA_HOME/temp/old_classes/
- cd $JAVA_HOME/temp/old_classes/
- jar cf rt_debug.jar *
- cp rt_debug.jar $JAVA_HOME/jre/lib/
- mv $JAVA_HOME/jre/lib/rt.jar $JAVA_HOME/lib/rt_old.jar
- cd $JAVA_HOME/jre/lib/
- ln -s rt_debug.jar rt.jar
- rm -rf $JAVA_HOME/temp