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

Java 如何使用Eclipse检查调试符号状态?,java,eclipse,sdk,debug-symbols,Java,Eclipse,Sdk,Debug Symbols,在讨论我的问题时,@Aaron Digulla指出了以下几点: 如果您安装了JavaSDK,那么在Java安装的根目录中应该有一个“src.zip”文件。如果丢失了,请再次下载Java。Eclipse应该自动找到源代码,并在您打开JTable类型时(或者在堆栈跟踪中单击行时)将其显示给您 文件src.zip为我提供,但我仍然无法访问JTable的源代码,就像@Aaron说的那样。有什么问题吗?我如何用Eclipse解决这个问题 “不明来源”让我担心, 不过。它意味着你的Java版本 没有调试符号

在讨论我的问题时,@Aaron Digulla指出了以下几点:

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

文件
src.zip
为我提供,但我仍然无法访问
JTable
的源代码,就像@Aaron说的那样。有什么问题吗?我如何用Eclipse解决这个问题

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

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

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

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

很抱歉这些陈腐的问题,但我觉得我还没有完全理解Java开发过程。

a)Eclipse自带了自己的Java编译器,因此如果您使用Java运行时环境,您不会遇到很多问题,除了jarsigner和JRE源代码等附加代码可能会丢失之外。验证安装的最佳方法是通过软件包管理器;但是,如果您是通过其他方式安装的,仔细观察目录通常可以区分两者(见下文)

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

c) 通过(从菜单)窗口->首选项(在选择器列上)展开“Java”,展开“Java”下的“Build Path”,然后选择“ClassPath variables”来验证它。您将看到几个变量,包括一个名为“JRE_SRC”的变量,它应该指向包含面向公众的JRE库源代码的SRC.zip文件。同时验证JRE_库是一个好主意

JDK主目录通常包含一个“bin”子目录和一个“jre”子目录,所以如果您只看到一个“bin”子目录,那么您很可能位于jre主目录中。有了这些知识,希望您能够找出剩下的问题。

转到首选项(窗口->首选项),并在搜索字段中键入“JRE”

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

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

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

这也会解决你的其他问题

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


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

您打开了
src.zip
?“里面是什么?”托加默斯勋爵:打开了,是的。有来源。那么为什么您不能访问
JTable
的来源呢?请说得更具体一些。我无法从Eclipse+1内部访问JTable的源代码。非常感谢您的帮助。现在一切都清楚了。JRC_SRC实际上是空的,我将修复它。还有一个问题:我想我使用的是JRE库而不是SDK,我该如何更改它?@0verbose,首先下载JDK并安装它。如果您在Linux、Windows或Solaris上,请下载SUN/Oracle JDK。另外,请参考您的供应商关于JDK的说明。然后记下JDK的“根”目录。从配置对话框中相同的“Java”上下文中,选择“installed JRE”并添加JDK根目录。选中JRE旁边的复选框,使其成为新项目的默认值。然后返回并将“编译器”编译级别设置为JDK的编译级别。最后,您可能需要设置现有项目的生成路径以与新设置相对应。