我正在调试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;
}
Run Code Online (Sandbox Code Playgroud)
我想c1在进入之前看到变量if (isHighSurrogate(c1)).但是,当我调试监视c1变量时,它会显示:

我真的尝试过添加rt.jar源代码,它确实可以进入JDK源代码的断点,如:

但为什么c1变量无法显示?
c.s*_*.s. 73
一般来说,为了能够在单步执行JDK源代码时观察变量,您需要使用调试信息编译类文件,即使用编译javac -g.
所以你最好的办法是找到一个带有调试信息的已编译版本(我找不到JDK 7的任何内容),或者你可以尝试自己编译源代码.
根据这篇文章(请注意,我没有尝试过)你不需要编译所有的资源,只需要你需要的资源.将新编译的类放在$jdk/jre/lib/ext /endorsed目录中,将使用新类而不是原始类rt.jar.
我相信这应该让你开始.
更新:其实我刚刚尝试过这个过程,并不难.在Windows上测试,JDK 1.7.0_11.从命令行调用所有命令:
d:\根文件夹jdk7_src和输出文件夹jdk_debugJDK_HOME文件夹中获取src.zip文件并将其解压缩jdk7_srcjavajavaxorgJDK_HOME\jre\lib获取文件rt.jar并放入工作文件夹(这只是为了方便在命令行中不指定太大的文件名).dir /B /S /X jdk7_src\*.java > filelist.txt创建一个以filelist.txt所有将要编译的java文件列表命名的文件.这将作为输入javacjavac使用以下命令执行: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在工作文件夹中生成一个文件.检查日志内容.你应该得到一堆警告,但没有错误.jdk_debug文件夹并运行命令:jar cf0 rt_debug.jar *.这将生成带有degug信息的新运行时库.JDK_HOME\jre\lib\endorsed.如果该endorsed文件夹不存在,请创建它.在Eclipse中调试程序.注意变量是如何正常命名的(不再是arg0,arg1等).快乐调试:)

web*_*rjn 14
cs的jre\lib\endorsed解决方案很棒.使用Eclipse更容易构建:创建Java项目,将javax*,java*放入src并让Eclipse编译.然后导出jar.
| 归档时间: |
|
| 查看次数: |
11738 次 |
| 最近记录: |