java的源码在debug的时候是不能看到局部变量的值的,只能看到调用的参数的值,这是因为sun 发布的jar包里的class文件编译的时候并没有带上debug信息,这对于理解java源码的内部实现很不方便。使用Endorsed Standards Override Mechanism机制可以实现看到局部变量的值。
http://docs.oracle.com/javase/1.4.2/docs/guide/standards/这是Endorsed Standards Override Mechanism机制的官方文档。注意虽然只有列出的包能被覆盖,但是使用sun的虚拟机则所有的二进制文件都能被覆盖。
首先是编译带有debug信息的class文件。从jdk的根目录下的src.zip取出对应的class文件。使用javac -g *.java能编译目录下所有java文件,-g即为添加debug信息。将这些class文件打成jar包 jar -cvf a.jar ./ (将当前目录下所有文件和目录打入jar包a.jar)注意不打成jar包似乎是不会被jvm检索到的。
然后将jar包放入指定的目录,官方文档写的是
<java-home>\lib\endorsed [Microsoft Windows] <java-home>/lib/endorsed [Solaris or Linux]
我尝试的结果却是%java_home%\jre\lib\endorsed,这一点太坑爹,浪费了好多时间。
然后就可以在myeclipse里看到java源码的debug信息了,注意myeclipse是自带一个jdk的,需要手动修改成sun的jdk才行:window—preferences—java—installed JREs,
右边add sun的虚拟机的路径,然后选择该虚拟机就行了。