首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Eclipse java调试:找不到源代码

Eclipse java调试:找不到源代码
EN

Stack Overflow用户
提问于 2011-05-30 17:36:46
回答 32查看 465.2K关注 0票数 192

在eclipse中调试java应用程序时,我在两种情况下收到“源代码未找到”错误:

  • 单步执行到另一个项目中的文件,该文件已经插入到已安装的maven资源库

中的文件

这些文件在那里,但是eclipse不会进入它们,而是显示一个"attach source“按钮

我尝试了附加(打开一个定义变量的对话框?!)eclipse确实跳转到了该文件,但是调试器无法检查那里的任何变量。另外,手动附加每个依赖项的源代码也是不实际的,因为在我的例子中有数千个依赖项文件。

我是eclipse\java的新手,所以解释一下为什么会发生这种情况+如何解决这个问题将会有很大帮助!

EN

回答 32

Stack Overflow用户

回答已采纳

发布于 2011-05-31 02:08:24

Eclipse调试与程序实际加载的类一起工作。

您描述的症状听起来像是在项目中找不到有问题的类,而是在您正在处理的项目之前没有找到调试信息的分发jar中。

这可能有几个原因,但请看一下显示此行为的类的位置(查看导航窗格以识别它)。您很可能需要更改项目的构建路径,以避免使用此jar,而让JVM使用该项目。

编辑:请注意,从2018年起,使用像Maven这样的构建框架是很常见的,其中构建路径由m2e插件管理,因此这个问题应该比提出问题时要少得多。如果您使用Maven和m2e,请确保启用首选项/ Maven / "Download Artifact“,或者右键单击项目Maven / "Download Sources”。

票数 59
EN

Stack Overflow用户

发布于 2014-04-08 18:42:03

配置Eclipse IDE只需3个步骤:

注意:更新源查找路径后,您必须停止并重新启动调试会话。否则,缺少源的文件将继续显示“缺少源”。

编辑源查找选择Edit Source Lookup...命令以打开“源路径”对话框,该对话框允许您对选定调试目标的源查找路径进行更改。

重要提示:在执行完最后一步后,重新启动。

票数 323
EN

Stack Overflow用户

发布于 2011-05-31 06:22:17

症状完美地描述了当找到的类没有关联(或分配)源时的情况。

JDK

  • 您可以在JRE>> Installed 中关联JDK的源代码。如果JRE (而不是JDK)被检测为要使用的默认JRE,那么JDK类将不具有附加的源代码。请注意,并非所有JDK类都提供了源代码,其中一些仅以二进制形式分发。手动添加项目生成路径中的
  • 类需要手动附加关联的源代码。源代码可以驻留在zip或jar文件、工作区或文件系统中。Eclipse将扫描压缩包,因此您的源代码不必位于归档文件的根目录中,以便从来自另一个插件(maven、PDE等)的依赖项中获取example.
  • Classes,。在这种情况下,如何提供源代码取决于插件。
    • PDE将要求每个插件都有相应的XXX.source包,其中包含插件的源代码。可以找到更多信息here和javadoc可以获取Maven依赖项的源代码和javadocs。此功能应在首选项中启用(该选项的名称类似于"Download source m2eclipse javadocs".
    • For other plugins,您需要查阅其documentation

从项目中加载的

  • 类将自动与项目中的源代码进行匹配。

但是,如果Eclipse仍然建议您附加source,即使我正确地设置了我的类及其源代码:

这几乎总是意味着Eclipse从与预期不同的位置找到类。检查您的源代码查找路径,看看它可能从哪里获取错误的类。根据您的调查结果更新路径。

当命中断点时,Eclipse根本找不到任何东西:

当您的源代码查找路径不包含当前在运行时加载的类时,会发生这种情况。即使类在工作区中,它对于启动配置也是不可见的,因为Eclipse严格遵循源代码查找路径,并且只附加当前调试的项目的依赖项。

一个例外是PDE中的调试包。在这种情况下,因为运行时是由多个项目组成的,这些项目不必声明彼此之间的依赖关系,所以Eclipse将自动在工作区中找到该类,即使它在源代码查找路径中不可用。

当我命中断点时,我看不到变量,或者它只是打开了源代码,但没有选择断点行:

这意味着在运行时,JVM或类本身都没有必要的调试信息。每次编译类时,都可以附加调试信息。为了减少类的存储空间,有时会省略这些信息,这使得调试这类代码变得很痛苦。您唯一的机会是尝试在启用调试的情况下重新编译。

Eclipse源代码查看器显示的行与实际执行的行不同:

它有时会显示也执行了空格。这意味着您的源代码与您的运行时版本的类不匹配。即使你认为这是不可能的,但它是可能的,所以请确保你设置了正确的来源。或者您的运行时与您的最新更改相匹配,这取决于您试图做什么。

票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6174550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档