Eclipse Java调试:找不到源


179

在Eclipse中调试Java应用程序时,在两种情况下会收到“ 找不到源 ”错误:

  • 进入另一个已经导入的项目中的文件
  • 进入已安装的Maven存储库中的文件

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

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

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

Answers:


53

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

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

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

编辑:请注意,自2018年起,通常使用Maven之类的构建框架,其中的构建路径由m2e插件管理,因此,此问题应该比问该问题时少得多。如果您使用Maven和m2e,请确保启用“首选项” /“ Maven” /“下载工件资源”,或右键单击项目“ Maven /“下载资源””。


您好感谢所有,但我发现这个答案更有用(叠过流链路)stackoverflow.com/questions/5815013/...
谢里夫

11
@shareef该链接关于缺少javadoc,而不是缺少源。
托尔比约恩Ravn的安徒生

@ACV是的。也许它没有您想要的那么详尽-您可以让我知道您想更好地解释什么吗?
托尔比约恩Ravn的安徒生

答案是另一种说法:问题是“找不到源”,我的建议是“尝试找到源”
Junjun Liu

1
@dhein考虑以更多细节打开一个新问题。
托尔比约恩Ravn的安德森

299

仅需3个步骤即可配置Eclipse IDE:

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

编辑源查找选择“编辑源查找...”命令[编辑源查找]以打开“源路径”对话框,该对话框可让您更改所选调试目标的源查找路径。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

重要说明 在此最后一步之后,请重新启动Eclipse


7
编辑源代码查找实际上对我有用。感谢道格拉斯·
弗雷里(

3
奇迹般有效。谢谢!
卡洛斯·斯波尔

11
而且即使那也不起作用怎么办...导致它对我也不起作用
Saras Arya

11
重要!!运行良好,但是只有在我停止正在运行的应用程序并重新启动它之后。直到我这样做,似乎仍然无法获取消息来源。
Jeach

1
我一直在处理这个问题几个月。这工作得很好。
aCarella

45

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

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

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

这几乎总是意味着Eclipse正在从您期望的其他位置查找该类。检查您的源代码查找路径,以查看错误的类。根据您的发现更新路径。

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

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

一个例外是PDE中的调试包。在这种情况下,由于运行时由多个项目组成,而不必相互声明依赖关系,因此即使源查找路径中不存在该类,Eclipse也会自动在工作空间中找到该类。

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

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

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

它有时可以表明还执行了空白空间。这意味着您的源与您的类的运行时版本不匹配。即使您认为不可能做到这一点,也请确保设置正确的信号源。或者您的运行时匹配您的最新更改,具体取决于您要执行的操作。


很好的答案!此答案缺少的窍门是特定于OSGi捆绑软件的:如果捆绑软件包含OSGI-OPT / src且捆绑软件位于Eclipse项目的构建路径中,则Eclipse可以找到源。详情请参见本计算器等项目:stackoverflow.com/questions/9720483/...
buzz3791

也许你可以看看这个 -我的东西开始尝试已经..
显示名称

很高兴知道。有很多理论,但没有实际解决方案。
MasterJoe2

11

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

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

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


我必须在“远程Java应用程序”或“ Java HotSpot VM”下的“调试”视图中执行此操作。
阿卜杜勒2015年

9

我的Eclipse Maven项目也有类似的问题。我在这个问题上战斗了很长时间,然后尝试用

mvn clean eclipse:eclipse

它有所帮助。

注意:由于两种方法非常不同,因此使用这种方法会使m2e插件感到困惑。m2e在您的项目中添加了一个名为“ Maven Dependencies”的虚拟节点,并要求Maven在其中添加所有依赖项。

mvn eclipse:eclipse另一方面,会在文件中创建很多单独的条目.classpath。Eclipse将像对待手动添加JAR一样处理它们。

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


也只有这个对我有用!mvn eclipse:eclipse将项目依赖项添加到Java构建路径,因此可以正常工作。此外,m2eclipse插件将仅在“库”选项卡中的“ Maven依赖关系”中添加项目依赖关系,而调试器找不到。
天真的

我不知道发生了什么,但是执行此命令后,我不再在“ Maven Dependencies”下看到我的Maven依赖项。
displayname

6

删除现有的调试配置并创建一个新的。那应该解决问题。


我遵循了这个,它奏效了。可能是因为我还在新的运行/调试配置的“源”选项卡上添加了所需的Java项目文件夹。也许只是将丢失的源文件夹/项目添加到现有运行/调试配置的“源”选项卡中就可以工作,而不必先删除它。
xilef 2014年

6

我面临着同样的问题,我遵循了下面的步骤。

Window=> Preferences=> Java=> Installed JREs

在此处输入图片说明

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

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

在此处输入图片说明

单击目录,浏览到Jdk,它看起来应该像下面的屏幕。 在此处输入图片说明

单击确定,并完成


使用此方法,如果Eclipse中无法从Java运行时加载类(其中完整的类型名称开头的任何类java.一样java.lang.String
亚伦Digulla

4

我的问题是我的Eclipse无法调试项目的源代码。我得到的空白页是“找到源代码节点”。

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


3

就我而言,即使在编辑源查找和添加项目之后,它也无法正常工作。我配置了项目的构建路径。

在此处输入图片说明

在那之后,我选择了JRE系统库,它开始工作了。

在此处输入图片说明


2

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

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


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上提出了增强请求,如果您同意“找不到源”这个问题将永远消失,请在此处投票:

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

谢谢!

佐佐


您现在对这个错误有我的支持!
阿卜杜勒2012年

1

对于“附加源”,我在“源附件配置”面板中添加了另一个maven项目目录。从m2存储库添加最新版本的jar无效。另一个maven项目中的所有类均无法打开。

在此处输入图片说明

这里的测试是我另一个包含所有Java源代码的Maven项目。



0

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


0

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

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

查找问题:

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

0

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


0

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

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

classes目录位于:/ workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <您的Web应用程序> / WEB-INF / classes


0

对于tomcat项目,我已经在此处检查了项目:窗口-首选项-Tomcat-源路径-将Java项目添加到源路径


0

就我而言,另一个引用项目的Maven版本与测试项目的版本不匹配。一旦它们相同,问题就消失了。


0

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



0

我在使用Java代码对包含数据集的excel文件进​​行处理时遇到了这个问题,然后将其转换为.csv文件,我尝试了此帖子的答案,但它们没有用。问题是jar文件本身。一步一步下载所需的jar文件并将其添加到我的项目中后,“找不到源”错误消失了。也许您可以检查您的jar文件。希望这会有所帮助。


0

这对我有用

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


0

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

-Dmaven.surefire.debug

例如

-Dmaven.surefire.debug exec:java


0

好吧,这就是对我有用的东西。我在StackOverflow上尝试了所有可能的解决方案。我尝试在调试菜单中更改源位置,安装了m2e Eclipse插件,从嵌入式Maven进行了更改,并且安装了run-jetty-run,但没有任何效果。现在,我要告诫的是,我并不是想查看外部人员的源代码,我只是想查看自己的OWN代码,但是每次我“介入”我在项目中编写的方法时,我都会得到“现在找到源”错误。

在最终问了专家之后,我的问题是Eclipse要做的第一件事就是调用ClassLoader,您可以从调试堆栈中看到它。我所要做的就是F6(进入),然后又回到原来的通话状态,然后再回到F5(进入)。还有我的代码。感叹……这么简单的解决方法,却浪费了一个小时。


0

对于初学者,

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

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


0

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


0

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

要抓住的是寻找来源罐子并将其装上。

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


-1

如果您要调试Maven Java项目,但是eclipse找不到源,请尝试以下方法之一。

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

尝试maven-> update,然后调试

  1. 转到项目的根目录;

mvn eclipse:eclipse

现在尝试调试


-1

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

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


好的,此版本的Eclipse中有一个相关的错误,在调试Java应用程序时会导致“找不到源”消息。有关更多详细信息,请参见错误报告bugs.eclipse.org/bugs/show_bug.cgi?id=537699
6pi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.