debuggingjdk源码不能监视variables是什么

我正在debuggingJDK源代码,如:

public static int codePointAt(CharSequence seq, int index) { char c1 = seq.charAt(index++); if (isHighSurrogate(c1)) { if (index < seq.length()) { char c2 = seq.charAt(index); if (isLowSurrogate(c2)) { return toCodePoint(c1, c2); } } } return c1; } 

我想在看到c1variablesif (isHighSurrogate(c1))之前进入variables。 但是,当我debugging手表c1variables时,它显示:

在这里输入图像描述

我真的已经尝试添加rt.jar源代码,它真的可以进入JDK源的断点,如: 在这里输入图像描述

但是为什么c1variables不能显示?

一般来说,为了能够在通过JDK源代码的过程中观察variables,需要使用debugging信息编译类文件,即使用javac -g进行javac -g

所以最好的办法是find一个已经编译过的debugging信息(我找不到JDK 7的东西),或者你可以尝试编译源代码。

根据这篇文章 (请注意,我没有尝试过),你不需要编译所有的来源,只需要你需要的。 把你新编译的类放在$jdk/jre/lib/ ext / endorsed目录下,新的类将被用在原来的rt.jar

我相信应该让你开始。

更新:其实我刚刚尝试过这个过程,并不难。 在Windows上testing,JDK 1.7.0_11。 所有的命令都是从命令行调用的:

  1. 创build你的工作文件夹。 我select了d:\ root文件夹
  2. 在你的工作文件夹内创build源文件夹,即jdk7_src和输出文件夹jdk_debug
  3. 从您的JDK_HOME文件夹中获取JDK_HOME文件并将其解压缩到jdk7_src
  4. select你要编译的东西,删除其余的东西。 对于他们所有人,你可能需要额外的步骤。 我select了这些文件夹:
    • java
    • javax
    • org
  5. JDK_HOME\jre\lib获取文件rt.jar并放入工作文件夹(这只是为了方便,不要在命令行中指定太大的文件名)。
  6. 执行命令: dir /B /S /X jdk7_src\*.java > filelist.txt创build一个名为filelist.txt的文件,其中包含将要编译的所有java文件的列表。 这将作为javacinput
  7. 使用以下命令执行javac
    javac -J-Xms16m -J-Xmx1024m -sourcepath d:\jdk7_src -cp d:\rt.jar -dd:\jdk_debug -g @filelist.txt >> log.txt 2>&1这将编译所有文件jdk_debug文件夹,并将在您的工作文件夹中生成一个log.txt文件。 检查日志内容。 你应该得到一堆警告,但没有错误。
  8. 进入jdk_debug文件夹并运行命令: jar cf0 rt_debug.jar * 。 这将生成您的新的运行时库与degug信息。
  9. 将该新的jar复制到JDK_HOME\jre\lib\endorsed文件夹中。 如果endorsed文件夹不存在,请创build它。

在Eclipse中debugging你的程序。 请注意variables是如何正常命名的(不再有arg0,arg1等)。 快乐debugging:)

JDK调试

CS的JRE \ LIB \认可的解决scheme是伟大的。 使用Eclipse更容易构build:创build一个Java项目,将javax *,java *放入src并让Eclipse编译。 然后导出jar子。

只是如此, 认可的覆盖机制已被弃用,并且将在以后的版本中被删除http://docs.oracle.com/javase/8/docs/technotes/guides/standards/ )。

使用这个pom.xml来获取带有debugging信息的JDK 1.8.0_111源代码:

 <project> <modelVersion>4.0.0</modelVersion> <name>JDK sources with debug information</name> <groupId>ex.jdk.debug</groupId> <artifactId>jdk-debug-sources</artifactId> <version>1.8.0_111</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.oracle</groupId> <artifactId>jdk-rt</artifactId> <version>1.8.0_111</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</version> <configuration> <debug>true</debug> <debuglevel>lines,vars,source</debuglevel> <source>1.8</source> <target>1.8</target> <excludes> <exclude>com/sun/java/swing/**</exclude> <exclude>com/sun/source/util/**</exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> 

你必须手动安装原始的rt.jar才能运行mvn clean install

 mvn install:install-file -Dfile=rt.jar -DgroupId=com.oracle -DartifactId=jdk-rt -Dversion=1.8.0_111 -Dpackaging=jar 

我复制到endorsed目录的rt.jar是原始的rt.jar但原来的类被我新生成的类所取代。