调试JDK源码,无法追踪显示局部变量的解决方案

来源:互联网 发布:微信排雷软件 编辑:程序博客网 时间:2024/06/05 03:06
  • 什么原因导致我们无法调试源码的时候无法追踪局部变量的值?

    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)

转载请申明出处

1 0
原创粉丝点击