Eclipse java调试:找不到源代码

时间:2011-05-30 09:36:46

标签: java eclipse debugging

在eclipse中调试java应用程序时,在两种情况下收到“ Source not found ”错误:

  • 单步执行已导入的其他项目中的文件
  • 插入已安装的maven存储库中的文件

文件在那里,但是eclipse不会进入它们,而是显示“附加源”的按钮

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

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

33 个答案:

答案 0 :(得分:260)

配置Eclipse IDE只需3个步骤:

  

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

编辑源查找 选择Edit Source Lookup ...命令[Edit Source Lookup]以打开Source Path对话框,它允许您更改所选调试目标的源查找路径。

enter image description here

enter image description here

enter image description here

最后一步之后

重要 重启Eclipse

答案 1 :(得分:48)

Eclipse调试适用于程序实际加载的

您描述的症状听起来像是在项目中找不到的类,但在没有调试信息的分发jar中找到了之前您正在使用的项目。

这可能由于多种原因而发生,但要查看找到显示此行为的类的位置(在导航窗格中查找以识别它)。您很可能需要更改项目的构建路径以避免使用此jar并让JVM使用该项目。

编辑:请注意,从2018年开始,通常使用像Maven这样的构建框架,其中构建路径由m2e插件管理,因此这个问题应该比问题时更频繁。如果您使用Maven和m2e,请确保启用Preferences / Maven /“Download Artifact Sources”或右键单击项目Maven /“Download Sources”。

答案 2 :(得分:45)

症状完美地描述了找到的类没有关联(或指定)来源的情况。

  • 您可以在偏好设置>中关联JDK类的来源。 Java>安装JRE 。如果JRE(不是JDK)被检测为要使用的默认JRE,那么您的JDK类将没有附加的源。请注意,并非所有JDK类都提供了源代码,其中一些仅以二进制形式分发。
  • 手动添加的项目构建路径中的类要求您手动附加关联的源。源可以驻留在zip或jar文件中,工作区中或文件系统中。 Eclipse将扫描zip,因此您的源不必位于存档文件的根目录中,例如。
  • 来自其他插件(maven,PDE等)的依赖项的类。在这种情况下,由插件决定如何提供源。
    • PDE 将要求每个插件都有相应的 XXX.source 包,其中包含插件的来源。可以找到更多信息herehere
    • m2eclipse 可以获取Maven依赖项的源和javadoc,如果它们可用的话。应启用此功能 m2eclipse 首选项(该选项的名称类似于“ Download source and javadocs ”。
    • 对于其他插件,您需要查阅他们的文档
  • 从项目加载的类会自动与项目中的源匹配。

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

这几乎总是意味着Eclipse从不同的地方找到了比你想象的更多的类。检查源查找路径以查看它可能在哪里获得错误的类。根据您的发现更新路径。

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

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

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

我遇到断点时看不到变量,或者只是打开源,但没有选择断点行:

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

Eclipse源查看器显示的行不同于实际执行的行:

有时可以显示空白空间也被执行。这意味着您的源与类的运行时版本不匹配。即使您认为这是不可能的,也是如此,因此请确保设置正确的来源。或者您的运行时匹配您的最新更改,具体取决于您要执行的操作。

答案 3 :(得分:10)

来自http://www.coderanch.com/t/587493/vc/Debugging-Eclipse-Source

“在调试模式下运行时,右键单击正在运行的线程(在线程选项卡中)并选择Edit Source Lookup。此时,您应该能够添加包含源代码的必要项目/ jar。”< / p>

我以这种方式添加了我当前的项目,它解决了我的问题

答案 4 :(得分:9)

我的eclipse maven项目遇到了类似的问题。我和这个问题打了很长时间,然后我尝试用

重建项目
mvn clean eclipse:eclipse

并且它有所帮助。

注意:使用这种方法会混淆m2e插件,因为这两种方法非常不同。 m2e为您的项目添加了一个虚拟节点,名为&#34; Maven Dependencies&#34;并要求Maven在那里添加所有依赖项。

另一方面,

mvn eclipse:eclipse将在文件.classpath中创建大量单个条目。 Eclipse将处理它们,就好像您手动将JAR添加到项目中一样。

除非您知道Eclipse中的类路径如何工作,否则不建议使用此方法。

答案 5 :(得分:5)

删除现有的Debug Configuration并创建一个新配置。这应该可以解决问题。

答案 6 :(得分:4)

我遇到了同样的问题,我遵循了下面的步骤。

Window =&gt; 偏好设置 =&gt; Java =&gt; 已安装的JRE

enter image description here

您在上面的屏幕中看到Jre1.8.0_12已被选中。

选择您正在使用的JRE,然后单击编辑。现在您应该看到波纹管屏幕。

enter image description here

点击目录,浏览Jdk,它应该看起来像波纹管屏幕。 enter image description here

点击确定,完成

答案 7 :(得分:3)

我遇到的问题是我的Eclipse没有调试我项目的源代码。我得到一个空白页面,其中包含“找到源代码节点”。

请单击“附加源代码”按钮。然后删除“默认”文件夹,然后单击“添加”并转到项目位置并附加。这对我有用

答案 8 :(得分:2)

显然,Eclipse不会自动知道从属jar的源代码在哪里。目前尚不清楚为什么调试器在连接源后无法检查变量。一种可能性是不正确/不兼容的来源。

假设您有一个maven项目并且依赖项的源代码已下载并在本地存储库中可用,您可能需要安装m2eclipse maven eclipse插件,看看这是否有助于解决您的问题。< / p>

答案 9 :(得分:1)

您可能拥有Eclipse可访问的依赖项的源代码。但Eclipse不知道动态加载的代码的源代码。例如。通过Maven。

对于Maven,我建议您使用run-jetty-run插件:

http://code.google.com/p/run-jetty-run/

作为一种解决方法,您还可以使用调试器连接到正在运行的JVM,您将看到代码。 或者,您可以从此处使用Eclipse的Dynamic Source Lookup插件:

https://github.com/ifedorenko/com.ifedorenko.m2e.sourcelookup

不幸的是,它没有帮助我,因为它存在带有空格的Windows路径问题。

我已经在Eclipse Bugzilla上填写了一个增强请求,如果你同意这个问题&#34; Source not found&#34;应该永远消失,请在这里投票:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=384065

谢谢!

纱纱

答案 10 :(得分:1)

在我的情况下&#34;附加源&#34;,我在&#34;源附件配置&#34;中添加了另一个maven项目目录。面板。从m2存储库中添加最新版本的jar无效。来自另一个maven项目的所有类都无法打开。

enter image description here

这里test是我的另一个包含所有java源代码的maven项目。

答案 11 :(得分:1)

就我而言,即使在编辑源查找和添加项目之后,它也没有用。我配置了项目的构建路径。

enter image description here

之后,我选择了JRE系统库,它运作良好。

enter image description here

答案 12 :(得分:0)

没有一个答案对我有用。

要解决此问题,我必须遵循以下步骤:

  • 右键单击Java HotSpot(TM)64位服务器。
  • 选择“编辑源查找”。
  • 单击“添加”。
  • 选择“文件系统目录”而不是Java项目。
  • 选择项目的根目录。
  • 选中“搜索子文件夹”。
  • 单击确定,确定。

谢谢。

答案 13 :(得分:0)

附加源->添加->外部存档->选择jar->打开->完成

要抓住的是寻找来源罐子并附加这个罐子。

例如,罐子以“ -sources” Stax2-api-3.4.1-sources

结尾

答案 14 :(得分:0)

我在eclipse 2019-03(4.11.0)中遇到了同样的问题,我只能通过通过远程调试进行调试来解决此问题,而不是直接在调试模式下启动它。

答案 15 :(得分:0)

点击->编辑源查找路径

然后

单击->最后添加,选择Java项目并选择项目路径。

来源:https://www.youtube.com/watch?v=IGIKPY6q1Qw

答案 16 :(得分:0)

对于初学者,

jar文件可能是您尚未包含在Eclipse工作区中的项目的一部分。

为此,您需要知道jar文件的项目名称。 假设它的 abc -18.0.0-SNAPSHOT.jar,这意味着您应该包含在工作空间中的项目是 abc

答案 17 :(得分:0)

嗯,这对我有用。我在StackOverflow上尝试了所有可能的解决方案。我尝试在调试菜单中更改我的源位置,我安装了m2e Eclipse插件,我从嵌入式Maven更改,并且我安装了run-jetty-run并且没有任何工作。现在,我要告诉我,我并不是想查看外部人员的源代码,我只是想看看我自己的OWN代码,但每次我进入&#34;对于我在MY项目中编写的方法,我得到了#34; Source现已发现&#34;错误。

在最后询问专家之后,我的问题是Eclipse正在做的第一件事是调用ClassLoader,你可以从调试堆栈中看到它。我所要做的只是F6(跳过),然后我回到原来的电话,然后是F5(步入)。还有我的代码。叹息......这么简单的修复,但浪费了一个小时。

答案 18 :(得分:0)

转到eclipse中的Debug配置,并使用以下目标来运行您的应用程序。

<强> -Dmaven.surefire.debug

例如

-Dmaven.surefire.debug exec:java

答案 19 :(得分:0)

有时会发生这些事情是因为版本也如您使用的是最新版本 版本在这种情况下可能会出现尝试使用旧版本它会工作。

答案 20 :(得分:0)

这对我有用

右键点击项目 - &gt;属性 - &gt;部署组件 - &gt;添加你的罐子

答案 21 :(得分:0)

我在使用java代码处理包含数据集的excel文件时遇到此问题,然后将其转换为.csv文件,我尝试了这篇文章的答案,但它们没有用。 问题是jar文件本身。在逐个下载所需的jar文件(旧版本)并将它们添加到我的项目后,“源未找到”错误消失了。 也许你可以查看你的jar文件。 希望这会有所帮助。

答案 22 :(得分:0)

如果您想通过自动下载将源代码附加到任何JAR,请尝试使用此Eclipse插件Java Source Attacher

enter image description here

答案 23 :(得分:0)

在调试模式下运行时,从线程挂起后单击“编辑源查找”。此时,我们应该能够添加包含源代码的必要项目/ jar。 以这种方式添加我当前的项目后,它解决了我的问题。感谢

答案 24 :(得分:0)

在我的情况下,其他引用项目的Maven版本与测试项目的版本不匹配。一旦它们相同,问题就消失了。

答案 25 :(得分:0)

在我使用tomcat项目的情况下,我在这里检查了项目: 窗口 - 首选项 - Tomcat - 源路径 - 将java项目添加到源路径

答案 26 :(得分:0)

我在Eclipse中遇到与Glassfish服务器调试有关的相关问题。 这是通过从不同的存储库加载源代码(从SVN更改为GitHub)来实现的。在这个过程中,Glassfish服务器使用了错误的编译类,因此,源和运行时间与空行上出现的断点不同步。

要解决此问题,请重命名或删除classes目录的顶级文件夹,Glassfish将重新创建整个类目录树,包括使用正确编译的版本更新类文件。

classes目录位于:/ workspace / glassfish3122eclipsedefaultdomain / eclipseApps /&lt;您的Web应用程序&gt; / WEB-INF / classes

答案 27 :(得分:0)

如果您使用的是eclipse或STS,请安装并使用GC(GrepCode插件),有时您不需要将源.zip文件附加到项目路径中,因此GrepCode可以正常工作。

答案 28 :(得分:0)

信息:当你将maven(pom.xml)与几个项目一起使用时,这是一个可能的解决方案。

如果您正在使用maven,请确保您在相应的pom.xml中使用的是哪个版本(例如1.0.1-SNAPSHOT)。 您的代码可能是最新的,但您的pom.xml依赖项仍然使用旧的JAR / Snapshots(使用旧代码)。

发现问题:

  • 尝试调试相应的文件。
  • 因此,请在相关代码区域中设置断点。
  • 当出现“source not found”时,请确保在正确的项目中绑定(可以找到.java文件的位置)。
  • 编译.class文件在IDE编辑器中打开。
  • 点击“与编辑器链接”以查找相应的JAR /快照。
  • 现在确保这个JAR是最新的JAR。可能还有一个更新的。在这种情况下,请在pom.xml中写入最新版本号。
  • 然后在正确的项目目录中进行maven更新和构建(例如“mvn clean install -U”)。

答案 29 :(得分:0)

我遇到了同样的问题。就我而言,我已禁用Window-Preferences-Java-Debug [暂停未捕获异常的执行]。然后,控制台向我显示了正确的错误:我的MySql用户没有访问数据库的权限。 According to this topic.

答案 30 :(得分:-1)

如果您正在尝试调试maven java项目,并且eclipse无法找到您的源代码,请尝试其中之一。

  1. 尝试在pom.xml中添加这些行
  2. <build>**<sourceDirectory>src/main/java</sourceDirectory>**...
    

    尝试maven-&gt;更新然后调试

    1. 转到项目的根目录;
    2.   

      mvn eclipse:eclipse

      现在尝试调试

答案 31 :(得分:-1)

在日食光子中尝试关闭 “窗口->首选项-> Java->调试->使用高级源代码查找”

编辑: 此版本的eclipse中有一个相关的错误,在调试Java应用程序时会导致“找不到源”消息。有关更多详细信息,请参见错误报告bugs.eclipse.org/bugs/show_bug.cgi?id=537699

答案 32 :(得分:-4)

在我的案例中,点击Remove All Breakpoints

即可解决问题