java - debug jdk源无法查看变量它是什么

标签 java

我正在调试 JDK 源代码,如下所示:

 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;
    }

并且我想在进入 if (isHighSurrogate(c1)) 之前查看 c1 变量。 但是,当我调试监视 c1 变量时 它显示:

enter image description here

我确实尝试过添加rt.jar源,它确实可以单步执行JDK源的断点,例如: enter image description here

但是为什么c1变量无法显示?

最佳答案

一般来说,为了能够在单步执行 JDK 源代码时观察变量,您需要使用调试信息来编译类文件,即使用 javac -g 进行编译。 .

因此,您最好的选择是找到带有调试信息的已编译版本(我找不到 JDK 7 的任何内容),或者您可以尝试自己编译源代码。

根据this post (请注意,我还没有尝试过)您不需要编译所有源,只需编译您需要的源。将新编译的类放在 $jdk/jre/lib/ext/ endorsed目录中,将使用新类代替原始 rt.jar 中的类.

我相信这应该可以帮助您开始。

更新:实际上我刚刚尝试过这个过程,一点也不难。在 Windows、JDK 1.7.0_11 上测试。所有命令都是从命令行调用的:

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

在 Eclipse 中调试您的程序。请注意变量的正常命名方式(不再是 arg0、arg1 等)。祝调试愉快:)

JDK debug

关于java - debug jdk源无法查看变量它是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640810/

相关文章:

java - 如何使用 Sikuli(Java) 从屏幕上的特定位置获取值?

使用UTF-8字符将SVG转换为PNG的Java代码

java - 尝试将数据库连接从 MySQL 更改为 Oracle 但出现错误

java - 递归循环

java - 如何从 java/scala 中的 xml 字符串中提取字段

java - 谷歌如何提供页面摘要

java - 带有 PriorityBlockingQueue 的 NullPointerException

Java构造函数安全

java - 无法在 eclipse (java) 中创建 ServerSocket

Java NullPointErexception Bukkit 插件