在 Eclipse 中调试 java 应用程序时,我在两种情况下收到“找不到源”错误:
进入已导入的不同项目中的文件
进入已安装的 Maven 存储库中的文件
文件在那里,但eclipse不会进入它们,而是显示一个“附加源”按钮
我尝试附加(它打开了一个对话框来定义一个变量?!)并且eclipse确实跳转到了文件,但是调试器无法检查那里的任何变量。此外,手动附加每个依赖项的源代码也是不切实际的,因为在我的情况下,有数千个依赖项文件。
我是 eclipse\java 的新手,所以解释为什么会发生这种情况+如何解决这个问题会有很大帮助!
只需 3 个步骤即可配置 Eclipse IDE:
注意:更新源查找路径后,您必须停止并重新启动调试会话。否则,缺少源的文件将继续显示“缺少源”。
Edit Source Lookup 选择 Edit Source Lookup... 命令 [ Edit Source Lookup ] 打开 Source Path 对话框,它允许您更改选定调试目标的源查找路径。
https://i.stack.imgur.com/aIYJA.png
https://i.stack.imgur.com/53p7o.png
https://i.stack.imgur.com/0aepF.png
重要在这最后一步之后重新启动 Eclipse。
Eclipse 调试与程序实际加载的类一起工作。
您描述的症状听起来像是在项目中找不到有问题的类,但是在您正在使用的项目之前没有找到调试信息的分发 jar 中。
这可能由于多种原因而发生,但请查看显示此行为的类所在的位置(查看导航窗格以识别它)。您很可能需要更改项目的构建路径以避免使用此 jar 并让 JVM 使用该项目。
编辑:请注意,从 2018 年开始,通常使用像 Maven 这样的构建框架,其中构建路径由 m2e 插件管理,因此这个问题应该比提出问题时少得多。如果您使用 Maven 和 m2e,请确保启用 Preferences/Maven/“Download Artifact Sources”或右键单击项目,Maven/“Download Sources”。
这些症状完美地描述了找到的类没有关联(或分配)源的情况。
您可以在 Preferences > Java > Installed JRE 中关联 JDK 类的源。如果检测到 JRE(不是 JDK)作为要使用的默认 JRE,那么您的 JDK 类将没有附加源。请注意,并非所有 JDK 类都提供了源代码,其中一些仅以二进制形式分发。
手动添加的项目构建路径中的类需要您手动附加关联的源。源代码可以驻留在 zip 或 jar 文件、工作区或文件系统中。例如,Eclipse 将扫描 zip,因此您的源代码不必位于存档文件的根目录中。
类,来自来自其他插件(maven、PDE 等)的依赖项。在这种情况下,如何提供源代码取决于插件。 PDE 将要求每个插件都有相应的 XXX.source 包,其中包含插件的源。更多信息可以在这里和这里找到。如果可用,m2eclipse 可以获取 Maven 依赖项的源代码和 javadocs。应该启用此功能 m2eclipse 首选项(该选项被命名为“下载源代码和 javadocs”。对于其他插件,您需要查阅他们的文档
PDE 将要求每个插件都有相应的 XXX.source 包,其中包含插件的源。更多信息可以在这里和这里找到。
如果可用,m2eclipse 可以获取 Maven 依赖项的源代码和 javadocs。应该启用此功能 m2eclipse 首选项(该选项被命名为“下载源代码和 javadocs”。
对于其他插件,您需要查阅他们的文档
从项目中加载的类会自动与项目中的源相匹配。
但是如果 Eclipse 仍然建议您附加源代码,即使我正确设置了我的类及其源代码:
这几乎总是意味着 Eclipse 从与您预期不同的位置查找类。检查您的源查找路径,看看它可能在哪里得到错误的类。根据您的发现更新路径。
当断点被命中时,Eclipse 根本找不到任何东西:
当您的源查找路径不包含当前在运行时加载的类时,就会发生这种情况。即使该类在工作区中,它也可能对启动配置不可见,因为 Eclipse 严格遵循源查找路径,并且仅附加当前正在调试的项目的依赖项。
PDE 中的调试包是一个例外。在这种情况下,由于运行时由多个项目组成,它们不必相互声明依赖关系,因此 Eclipse 会自动在工作区中查找该类,即使它在源查找路径中不可用。
当我遇到断点时,我看不到变量,或者它只是打开了源代码,但没有选择断点行:
这意味着在运行时,JVM 或类本身都没有必要的调试信息。每次编译类时,都可以附加调试信息。为了减少类的存储空间,有时会省略这些信息,这使得调试此类代码很痛苦。您唯一的机会是尝试启用调试并重新编译。
Eclipse 源代码查看器显示的行与实际执行的行不同:
有时它可以显示空白空间也被执行。这意味着您的源代码与类的运行时版本不匹配。即使您认为这是不可能的,也确实如此,因此请确保您设置了正确的来源。或者您的运行时匹配您的最新更改,具体取决于您要执行的操作。
来自http://www.coderanch.com/t/587493/vc/Debugging-Eclipse-Source
“在调试模式下运行时,右键单击正在运行的线程(在线程选项卡中)并选择编辑源代码查找。此时,您应该能够添加包含源代码的必要项目/jar。”
我以这种方式添加了我当前的项目,它解决了我的问题
我的 Eclipse Maven 项目也有类似的问题。我与这个问题斗争了很长时间,然后我尝试重建项目
mvn clean eclipse:eclipse
它有帮助。
注意:使用这种方法会混淆 m2e 插件,因为这两种方法非常不同。 m2e 将一个名为“Maven Dependencies”的虚拟节点添加到您的项目中,并要求 Maven 在其中添加所有依赖项。
另一方面,mvn eclipse:eclipse
将在文件 .classpath
中创建许多单独的条目。 Eclipse 将处理它们,就像您手动将 JAR 添加到项目中一样。
除非您知道 Eclipse 中的类路径是如何工作的,否则不建议使用这种方法。
mvn eclipse:eclipse
将项目依赖项添加到 java 构建路径,这样它就可以工作了。此外,m2eclipse插件只会在Libraries选项卡的“Maven Dependencies”中添加项目依赖,调试器找不到。
我面临同样的问题,我按照以下步骤操作。
窗口 => 首选项 => Java => 已安装的 JRE,
https://i.stack.imgur.com/JSC6Q.png
您在上面的屏幕中看到 Jre1.8.0_12
被选中。
选择您正在使用的 JRE,然后单击编辑。现在你应该看到下面的屏幕。
https://i.stack.imgur.com/LDaqY.png
https://i.stack.imgur.com/FgArN.png
点击确定,完成
java.
开头的任何类,例如 java.lang.String
),请使用此方法
删除现有的调试配置并创建一个新的。那应该可以解决问题。
我遇到的问题是我的 Eclipse 没有调试我的项目的源代码。我得到一个空白页,上面有“找到源代码节点”。
请单击附加源代码按钮。然后删除“默认”文件夹,然后单击添加并转到您的项目位置并附加。这对我有用
上面提到的答案都不适合我。
要解决此问题,我必须按照以下步骤操作:
右键单击 Java HotSpot(TM) 64 位服务器。
选择“编辑源查找”。
点击“添加”。
选择“文件系统目录”而不是 Java 项目。
选择项目的根目录。
选中“搜索子文件夹”。
单击确定确定。
谢谢。
就我而言,即使在编辑源查找和添加项目之后,它也没有用。我配置了项目的构建路径。
https://i.stack.imgur.com/V2kiT.png
之后,我选择了 JRE System Library 并且它工作了。
https://i.stack.imgur.com/EV8mW.png
显然,Eclipse 不会自动知道依赖 jar 的源代码在哪里。不清楚为什么调试器在附加源后无法检查变量。一种可能性是不正确/不兼容的来源。
假设您有一个 maven 项目并且依赖项的源已下载并在本地存储库中可用,您可能需要安装 m2eclipse,maven eclipse 插件,看看它是否有助于解决您的问题。
您可能拥有 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
谢谢!
莎莎
在“附加源”中,我在“源附件配置”面板中添加了另一个 maven 项目目录。从 m2 存储库添加最新版本的 jar 不起作用。其他 maven 项目中的所有类都无法打开。
https://i.stack.imgur.com/fEsyn.png
这里的 test 是我的另一个包含所有 java 源代码的 maven 项目。
我有同样的问题。就我而言,我已禁用 Window-Preferences-Java-Debug [暂停执行未捕获的异常]。然后,控制台向我显示了正确的错误:我的 MySql 用户没有访问数据库的权限。 According to this topic.
信息:当您将 maven (pom.xml) 与几个项目一起使用时,这是一个可能的解决方案。
如果您正在使用 maven,请确保您在相应的 pom.xml 中使用什么版本(例如 1.0.1-SNAPSHOT )。您的代码可能是最新的,但您的 pom.xml 依赖项仍在使用旧的 JAR/快照(使用旧代码)。
发现问题:
尝试调试相应的文件。
因此,在相关代码区设置断点。
当出现“source not found”时,请确保在正确的项目中绑定(可以找到.java文件)。
编译 .class 文件在 IDE 编辑器中打开。
单击“Link with Editor”以找到相应的 JAR/Snapshot。
现在确保这个 JAR 是最新的。可能有一个更新的。在这种情况下,在 pom.xml 中写入最新的版本号。
然后在正确的项目目录中进行 maven 更新和构建(例如“mvn clean install -U”)。
如果您使用的是 eclipse 或 STS,请安装并使用 GC(GrepCode 插件),有时您不需要将源 .zip 文件附加到您的项目路径中,因此 GrepCode 适合您。
我在 Eclipse 中遇到了与 Glassfish 服务器调试有关的相关问题。这是通过从不同的存储库(从 SVN 更改为 GitHub)加载源代码来实现的。在此过程中,Glassfish 服务器使用了错误的编译类,因此,源和运行时间将与出现在空行上的断点不同步。
为了解决这个问题,重命名或删除类目录的顶层文件夹,Glassfish 将重新创建整个类目录树,包括使用正确编译的版本更新类文件。
类目录位于:/workspace/glassfish3122eclipsedefaultdomain/eclipseApps/<您的 Web 应用程序>/WEB-INF/classes
就我的tomcat项目而言,我在这里检查了项目:Window - Preferences - Tomcat - Source Path - Add java projects to source path
在我的情况下,另一个引用项目的 Maven 版本与测试项目的版本不匹配。一旦它们相同,问题就消失了。
在调试模式下运行时,从线程挂起后单击编辑源查找。此时,我们应该能够添加包含您的源代码的必要项目/jar。在我以这种方式添加我当前的项目之后,它解决了我的问题。谢谢
我在处理 java 代码以处理包含数据集的 excel 文件,然后将其转换为 .csv 文件时遇到了这个问题,我尝试了这篇文章的答案,但它们没有用。问题是jar文件本身。一个一个下载所需的 jar 文件(旧版本)并将它们添加到我的项目后,“找不到源”错误消失了。也许你可以检查你的 jar 文件。希望这会有所帮助。
这对我有用
右键单击项目 -> 属性 -> 部署程序集 -> 添加您的 jar
转到 Eclipse 中的调试配置并使用以下目标来运行您的应用程序。
-Dmaven.surefire.debug
例如
-Dmaven.surefire.debug 执行:java
好吧,这对我有用。我在 StackOverflow 上尝试了所有可能的解决方案。我尝试在调试菜单中更改我的源位置,我安装了 m2e Eclipse 插件,我从嵌入式 Maven 更改,我安装了 run-jetty-run,但没有任何效果。现在,我要提醒一下,我并没有试图查看外部人员的源代码,我只是想查看我的 OWN 代码,但是每次我“介入”我在项目中编写的方法时,我都得到了“现在找到源”错误。
最后询问专家后,我的问题是 Eclipse 做的第一件事是调用 ClassLoader,您可以从调试堆栈中看到。我所要做的就是按 F6(跨步),然后它把我带回原来的电话,然后按 F5(跨步)。还有我的代码。叹息......如此简单的修复,但浪费了一个小时。
给菜鸟的,
jar 文件可能是您尚未包含在 Eclipse 工作区中的项目的一部分。
为此,您需要知道 jar 文件的项目名称。例如,它的 abc-18.0.0-SNAPSHOT.jar,这意味着您应该包含在工作区中的项目是 abc。
我在 eclipse 2019-03 (4.11.0) 中遇到了同样的问题,我只能通过远程调试进行调试而不是直接在调试模式下启动它来解决这个问题。
附加源 -> 添加 -> 外部存档 -> 选择 jar -> 打开 -> 完成
问题是寻找源罐并附上这个罐子。
例如,jar 以“-sources”结尾 Stax2-api-3.4.1-sources
有时这些事情会因为版本而发生,如果您使用的是最新版本,在这种情况下可能会出现尝试使用旧版本它会起作用。