在IntelliJ IDEA中逐步查看JDK源代码

59
如何在 IntelliJ IDEA 7 中逐步查看JDK源代码并查看调试信息?我目前可以命中断点并逐步执行代码,但是调试信息不可用。这意味着我无法看到本地变量的值。
如果有影响,我只想逐步查看一个类的源代码。 需要注意的是,这是javax.swing.text.html.HTMLDocument类,并且我确实拥有相应的.java文件的副本。
7个回答

44
如果你在 [文件菜单 ->] 设置 -> 调试器 -> 步骤 中查看,会看到一个名为“不进入这些类”的列表,其中可能会列出“java.*”。是这种情况吗?你可以在那里关闭该选项。
显然,调试信息不可用。根据这个线程
"很遗憾,JDK 类的参数和本地变量的调试信息被剥离了。 多年前,我提出了一个请求,希望 Idea 从源代码中推导出必要的信息(基本上将变量名转换为方法本地变量的索引):
调试器:在没有调试信息时显示变量信息"
请投票/评论。
作为一种解决方法,你可以从源代码重新编译 JDK,但需要排除一些没有所有所需源代码附加的类。
有趣的是,你可以下载Java 6u18 的 beta 版本,在 DEBUG bundle 中包含了调试信息

正如我在原帖中提到的那样,我可以很好地在javax.*类中触发断点。问题是调试信息不可用。无论如何,为了确保,我按照你的建议做了,但调试信息仍然不可用。 - Paul Reiners

27
更新:IntelliJ IDEA 13+版本 可以提供没有调试信息的本地变量信息

作为JDK的一部分的Java类由于大小和性能原因编译时没有调试信息。如果您想在这些类中获取调试信息,您需要安装带有调试信息的JDK开发版本,或重新从源代码构建要调试的JDK部分,并配置新的JDK使用带有调试信息的jar包中的这些类的版本。

此线程 提供了如何使用调试信息从源代码中重新构建 rt.jar 中的JDK类的说明。

P.S. 这个问题与 IntelliJ IDEA 无关。


16
  1. 安装JDK
  2. 添加src.jar路径
    1. 进入: 项目结构(项目设置)> 平台设置 > SDKs > 源代码路径
    2. 添加 src.jar 路径
      • OSX示例: /Library/Java/JavaVirtualMachines/1.6.0_45-b06-451.jdk/Contents/Home
      • Windows示例: C:\Program Files\Java\jdk1.7.0_03 (32位请检查 Program (x86))
    3. 等待长时间索引!
  3. 移除调试器筛选器
    1. 进入: 设置 > 调试器 > 步进
    2. 取消勾选要排除的包,例如:javax.*

3

除了“不要进入这些类”信息外,还应该配置src.jar。右键单击项目,选择“打开模块设置”。在平台设置下,选择“SDKs”。选择您正在使用的Java SDK版本。选择Sourcepath选项卡,点击“+”按钮,然后添加来自JDK(或OSX JDK的单独源代码下载)的src.jar。这将使您能够打开JDK类并在调试时进入它们。


1
我使用的是Ubuntu 16.04和OpenJDK 8。 为了获取JDK源代码,我需要单独安装一个额外的软件包: sudo apt-get install openjdk-8-source。 感谢http://askubuntu.com/questions/755853/how-to-install-jdk-sources提供的解决方案。 - Stanislav Karakhanov

1

我在Mac上做了这个操作,以获取我的Android源代码,但类似的方法也适用于你。

  • 文件 > 项目结构

  • 在平台设置中选择“SDKs”。

  • 选择“Android SDK”。

  • 选择“源路径”选项卡

  • 按“+”

  • 浏览到我Java源代码的位置


首先,这是关于浏览JDK而不是Android。其次,你回答的最后一部分“定位我的Java源代码”似乎是关于调试自己的源代码而不是平台的(如果不是,请澄清)。 - Maarten Bodewes
首先,这是关于浏览JDK,而不是Android。其次,你答案的最后部分“到我的Java源代码位置”似乎是关于调试你自己的源代码,而不是平台的源代码(如果不是,请澄清一下)。 - undefined
如果我是你的话,我可能会阅读一些更新的答案。不要看那些十多年前的回答 :-) ... 我相信IntelliJ在这段时间里已经发布了更新的版本。 - Peter Theill

-1

你可以在外部库中找到源代码 --> rt.jar


-2

设置 - 编译器 - Java编译器 - Java选项,你应该勾选“生成调试信息”的选项,这样它就会带着调试信息编译。


这是关于浏览JDK源代码,而不是用户生成的代码。生成调试代码是行不通的,因为(开放)JDK类已经被编译过了。 - Maarten Bodewes
这是关于浏览JDK源代码,而不是用户生成的代码。生成调试代码是行不通的,因为(开放)JDK类已经被编译过了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接