Eclipse java调试:没有找到源代码

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

  • 进入已经导入的不同项目中的文件
  • 进入已安装的maven存储库中的文件

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

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

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

497924 次浏览

显然,Eclipse不会自动知道依赖jar的源代码在哪里。不清楚为什么调试器不能检查变量一旦附加源。一种可能是来源不正确/不兼容。

假设你有一个maven项目,依赖项的来源已经下载并在本地存储库中可用,你可能想要安装m2eclipse, maven eclipse插件,看看这是否有助于解决你的问题。

Eclipse调试工作与类实际上加载由程序。

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

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

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

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

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

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

    这几乎总是意味着Eclipse从不同的位置找到类。检查您的源查找路径,看看它可能在哪里得到错误的类。根据您的发现更新路径。

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

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

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

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

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

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

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

我也有同样的问题。在我的例子中,我禁用了Window-Preferences-Java-Debug[在未捕获的异常上暂停执行]。然后,控制台显示了正确的错误:我的MySql用户没有访问数据库的权限。根据这个话题。

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

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

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

作为一种解决方案,你也可以用调试器连接到正在运行的JVM,你会看到代码。 或者你也可以使用Eclipse的动态源查找插件:

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

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

我已经在Eclipse Bugzilla上填写了一个增强请求,如果你同意这个问题“源未找到”应该永远消失,请在这里投票:

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

谢谢!

莎莎

我遇到的问题是,我的Eclipse没有调试项目的源代码。我得到了一个空白页,上面写着“找到源代码节点”。

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

删除现有的Debug配置并创建一个新的Debug配置。这样问题就解决了。

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

"在调试模式下运行时,右键单击正在运行的线程(在线程选项卡中)并选择编辑源查找。此时,您应该能够添加必要的项目/jar,其中包含您的源代码。”

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

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

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

发现问题:

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

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

在我的案例中,通过单击Remove All Breakpoints解决了问题

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

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

类目录位于:/workspace/glassfish3122eclipsedefaultdomain/eclipseApps/<你的Web应用程序>/ Web - inf /classes

配置Eclipse IDE只需3个步骤:

在更新Source Lookup路径之后,你必须停止并重新启动调试会话。否则,缺少源代码的文件将继续显示“缺少源代码”。

编辑源查找 选择编辑源查找…命令[编辑源查找]打开源路径对话框,允许您更改所选调试目标的源查找路径

enter image description here

enter image description here

enter image description here

在最后一步之后重要的 重新启动Eclipse

我的eclipse maven项目也有类似的问题。我与这个问题斗争了很长一段时间,然后我试图重建项目

mvn clean eclipse:eclipse

这很有帮助。

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

另一方面,mvn eclipse:eclipse将在文件.classpath中创建许多单独的条目。Eclipse将处理它们,就像您手动将jar添加到项目中一样。

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

在我的tomcat项目的情况下,我在这里检查了项目: 窗口-参数设置- Tomcat -源路径-添加java项目到源路径

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

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

如果你想通过自动下载将源代码附加到任何JAR,请尝试使用这个Eclipse插件Java源攻击器

enter image description here

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

这对我很有效

右键单击项目->属性->部署程序集->添加您的jar

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

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

尝试maven->更新,然后调试

  1. 进入项目的根目录;

mvn eclipse:月食

现在试试调试

当我面对同样的问题时,我遵循了下面的步骤。

__abc0 => __abc1 => __abc2 => __abc3,

enter image description here

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

选择您正在使用的JRE并单击编辑。现在你应该会看到风箱屏幕。

enter image description here

点击目录,浏览Jdk,它应该看起来像下面的屏幕。 enter image description here < / p >

点击ok,就完成了

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

-Dmaven.surefire.debug

-Dmaven.surefire.debug exec: java

在我的例子中,即使在编辑源代码查找和添加项目之后,它也没有工作。我配置了项目的构建路径。

enter image description here

之后,我选择JRE系统库,它工作。

enter image description here

这是对我有用的方法。我在StackOverflow上尝试了所有可能的解决方案。我尝试在调试菜单中更改源代码位置,安装了m2e Eclipse插件,从嵌入式Maven更改,并安装了run-jetty-run,但没有任何效果。现在,我要警告,我不是试图查看一个外部的人的源代码,我只是想看到我自己的代码,但每次我“介入”我的方法,我写的是在我的项目,我得到了“source Now found”错误。

在最终询问专家后,我的问题是Eclipse所做的第一件事是调用ClassLoader,这可以从调试堆栈中看到。我所要做的是F6(跨过去),然后它带我回到我最初的呼叫,然后F5(跨过去)。这就是我的代码。叹息……这么简单的修补,却浪费了一个小时。

在我的案例中,在“Attach Source”中,我在“Source Attachment Configuration”面板中添加了另一个maven项目目录。从m2存储库中添加最新版本的jar不能正常工作。来自其他maven项目的所有类都未能打开。

enter image description here

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

对于初学者来说,

有可能jar文件是项目的一部分,您还没有将其包含在Eclipse工作空间中。

为此,您需要知道jar文件的项目名称。 例如,它的美国广播公司-18.0.0- snapshot .jar,这意味着你应该包含在你的工作空间中的项目是美国广播公司.

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

. < p >编辑: 在这个版本的eclipse中有一个相关的错误,导致调试Java应用程序时出现“源未找到”消息。详见bug报告bugs.eclipse.org/bugs/show_bug.cgi?id=537699

单击->编辑源查找路径

之后

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

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

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

Attach source -> Add -> External Archive -> select jar -> open -> done

catch是寻找来源罐子和附加这个罐子。

例如,jar以“-sources”结尾。Stax2-api-3.4.1-sources

上面提到的答案对我都没用。

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

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

谢谢。

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