gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:44:55 26 4
gpt4 key购买 nike

我正在调试 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 变量。但是,当我调试 watch 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
    • 组织
  5. 从您的 JDK_HOME\jre\lib 获取文件 rt.jar 并放入工作文件夹(这只是为了方便不要在其中指定太大的文件名命令行)。
  6. 执行命令:dir/B/S/X jdk7_src\*.java > filelist.txt 创建一个名为filelist.txt的文件,其中包含所有的列表将被编译的 java 文件。这将作为 javac
  7. 的输入给出
  8. 使用命令执行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 文件。检查日志内容。你应该得到一堆警告,但没有错误。
  9. 进入 jdk_debug 文件夹并运行命令:jar cf0 rt_debug.jar *。这将生成带有调试信息的新运行时库。
  10. 将该新 jar 复制到文件夹 JDK_HOME\jre\lib\endorsed。如果 endorsed 文件夹不存在,则创建它。

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

JDK debug

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com