【问题标题】:How can I check on debug symbol status with Eclipse?如何使用 Eclipse 检查调试符号状态?
【发布时间】:2011-06-01 15:02:14
【问题描述】:

在讨论another question 时,@Aaron Digulla 指出了以下几点:

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

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

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

a) 我使用的是 Eclipse,为什么我不应该使用 SDK?

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

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

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

【问题讨论】:

  • 你打开src.zip了吗?里面是什么?
  • @Lord Torgamus:打开,是的。有来源。
  • 那为什么不能访问JTable的来源呢?请更具体。
  • 我无法从 Eclipse 内部访问 JTable 的源代码

标签: java eclipse sdk debug-symbols


【解决方案1】:

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

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

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

JDK 主目录通常包含一个“bin”子目录和一个“jre”子目录,因此如果您只看到一个“bin”子目录,则很有可能您位于 JRE 主目录中。有了这些知识,希望您能够解决剩下的问题。

【讨论】:

  • +1 非常感谢您的帮助。现在一切都清楚了。 JRC_SRC 实际上是空的,我会修复它。还有一个问题:我认为我使用的是 JRE 库而不是 SDK,我该如何更改?
  • @0verbose,先下载JDK并安装。如果您使用的是 Linux、Windows 或 Solaris,请下载 SUN/Oracle JDK。在其他方面,请参阅供应商的 JDK 说明。然后记下 JDK 的“根”目录。从配置对话框中的相同“Java”上下文中,选择“已安装的 JRE”并添加您的 JDK 根目录。选中 JRE 旁边的框以使其默认用于新项目。然后返回并将“编译器”编译级别设置为您的 JDK 的编译级别。最后,您可能需要将现有项目的构建路径设置为与新设置相对应。
【解决方案2】:

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

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

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

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

这也应该可以解决您的其他问题。

要检查一个类是否包含调试符号,用javap -v反编译它(见这个问题:Check if Java bytecode contains debug symbols

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

【讨论】:

    猜你喜欢
    • 2014-10-13
    • 2011-11-11
    • 1970-01-01
    • 2022-06-29
    • 2011-03-18
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多