如何使用Eclipse检查调试符号状态?

在讨论我问的另一个问题时 ,@ Aaron Digulla指出了以下问题:

如果安装了Java SDK,则Java安装的根目录中应该有一个“src.zip”文件。 如果它丢失了,请再次下载Java。 当您打开JTable类型时(或者当您单击堆栈跟踪中的行时),Eclipse应该自动找到源并显示给您。

文件src.zip对我来说,但我仍然无法访问JTable的来源,如@Aaron所说。 可能是什么问题呢? 我怎样才能用Eclipse解决这个问题?

不过,“未知来源”让我很担心。 这意味着您的Java版本没有调试符号。 确保你a)在开发时使用SDK,b)你的SDK包含调试符号,c)不要告诉命令java在加载类时剥离调试符号。

a)我正在使用Eclipse,为什么我不应该使用SDK?

b)我如何知道我的SDK是否包含调试符号? 如果没有,我该如何添加它们?

c)如何检查Eclipse是否告诉java剥离调试符号?

抱歉这些平庸的问题,但我觉得我不完全理解Java开发过程。

a)Eclipse带有它自己的Java编译器,所以如果你使用的是Java Runtime Environment,你就不会遇到很多问题,除了像jarsigner和可能的JRE源代码这样的额外内容可能会丢失。 validation安装的最佳方法是通过包管理器; 但是,如果您通过其他方式安装,仔细的目录观察通常可以区分两者(见下文)。

b)通常在没有调试符号的情况下编译JRE库。 SDK库通常具有它们。 通过使用打开调试端口的命令行选项启动JVM来完成Java调试。 SDK与JVM通信,请求通过此端口设置断点。 稍后,如果您决定步进JVM,它还会通过此端口发送步/跳/回滚调试命令。 “调试”符号实际上是JVM字节码表,它引用从特定字节码指令开始有效的源代码行。 这允许调试器将运行的字节码与原始源代码中的行号相关联。

c)通过(从菜单)Window-> Preferences(在选择器列上)validation它展开“Java”,展开“Java”下的“Build Path”,然后选择“ClassPath变量”。 您将看到一些变量,包括一个名为“JRE_SRC”的变量,它应该指向包含面向公众的JRE库源代码的src.zip文件。 最好同时validationJRE_LIB。

JDK主目录通常包含“bin”子目录和“jre”子目录,因此如果您只看到“bin”子目录,那么您在JRE主目录中的几率很高。 有了这些知识,希望你能够完成其余的工作。

转到首选项(窗口 – >首选项),然后在搜索字段中键入“JRE”。

选择“已安装的JRE”。 确保Java Runtime使用您期望的Java版本。

如果是,请选择它,单击“编辑”。 “rt.jar”的图标应该在它上面有一个小文本符号(例如,它应该看起来与dnsns.jar不同)。

如果没有,请单击“恢复默认值”。 如果这不起作用,请仔细检查路径。

这也应该解决你的其他问题。

要检查类是否包含调试符号,请使用javap -v对其进行反编译(请参阅此问题: 检查Java字节码是否包含调试符号 )

某些Java实现允许在加载类时忽略调试符号。 这可能会导致包含符号的类的“未知来源”。 我确信Sun的Java有这样的选项,但我再也找不到了。