Answers:
Eclipse调试适用于程序实际加载的类。
您描述的症状听起来像是在项目中找不到相关类,但在您正在使用的项目之前未找到调试信息的分发jar中。
发生这种情况可能有多种原因,但请查看找到显示此行为的类的位置(在导航窗格中进行识别)。您很可能需要更改项目的构建路径,以避免使用此jar,而让JVM使用该项目。
编辑:请注意,自2018年起,通常使用Maven之类的构建框架,其中的构建路径由m2e插件管理,因此,此问题应该比问该问题时少得多。如果您使用Maven和m2e,请确保启用“首选项” /“ Maven” /“下载工件资源”,或右键单击项目“ Maven /“下载资源””。
仅需3个步骤即可配置Eclipse IDE:
注意:更新Source Lookup路径后,您必须停止并重新启动调试会话。否则,缺少源的文件将继续显示“缺少源”。
编辑源查找选择“编辑源查找...”命令[编辑源查找]以打开“源路径”对话框,该对话框可让您更改所选调试目标的源查找路径。
重要说明 在此最后一步之后,请重新启动Eclipse。
这些症状完美地描述了当找到的类没有关联(或分配)源时的情况。
但是,即使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插件将仅在“库”选项卡中的“ Maven依赖关系”中添加项目依赖关系,而调试器找不到。
删除现有的调试配置并创建一个新的。那应该解决问题。
您可能具有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(pom.xml)与几个项目一起使用时,这是一个可能的解决方案。
如果您正在使用maven,请确保在相应的pom.xml中使用的是哪个版本(例如1.0.1-SNAPSHOT)。您的代码可能是最新的,但是pom.xml依赖项仍在使用旧的JAR / Snapshots(以及旧的代码)。
查找问题:
我在Eclipse中与Glassfish服务器调试有关的一个相关问题。这是通过从其他存储库加载源代码(从SVN更改为GitHub)来实现的。在此过程中,Glassfish服务器使用了错误的编译类,因此,源和运行时将与空行上出现的断点不同步。
要解决此问题,请重命名或删除classes目录的顶层文件夹,Glassfish将重新创建整个class目录树,包括使用正确编译的版本更新class文件。
classes目录位于:/ workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <您的Web应用程序> / WEB-INF / classes
如果要通过自动下载将源代码附加到任何JAR,请尝试使用此Eclipse插件Java Source Attacher
这对我有用
右键单击项目->属性->部署程序集->添加您的jar
转到eclipse中的Debug配置,并使用以下目标运行您的应用程序。
-Dmaven.surefire.debug
例如
-Dmaven.surefire.debug exec:java
好吧,这就是对我有用的东西。我在StackOverflow上尝试了所有可能的解决方案。我尝试在调试菜单中更改源位置,安装了m2e Eclipse插件,从嵌入式Maven进行了更改,并且安装了run-jetty-run,但没有任何效果。现在,我要告诫的是,我并不是想查看外部人员的源代码,我只是想查看自己的OWN代码,但是每次我“介入”我在项目中编写的方法时,我都会得到“现在找到源”错误。
在最终问了专家之后,我的问题是Eclipse要做的第一件事就是调用ClassLoader,您可以从调试堆栈中看到它。我所要做的就是F6(进入),然后又回到原来的通话状态,然后再回到F5(进入)。还有我的代码。感叹……这么简单的解决方法,却浪费了一个小时。
在Eclipse光子中,尝试关闭“窗口->首选项-> Java->调试->使用高级源代码查找”
编辑:此版本的Eclipse中有一个相关的错误,在调试Java应用程序时会导致“找不到源”消息。有关更多详细信息,请参见错误报告bugs.eclipse.org/bugs/show_bug.cgi?id=537699。