问题
在eclipse中调试java应用程序时,我在两种情况下收到"Source not found"错误:
单步执行已导入的其他项目中的文件
插入已安装的maven存储库中的文件
文件在那里,但是eclipse不会进入它们,而是显示一个按钮"attach source"
我尝试附加(打开一个对话框来定义变量?!),eclipse确实跳转到文件,但调试器无法检查那里的任何变量。另外,为每个依赖项手动附加源是不实际的,因为在我的情况下有数千个依赖项文件。
我是新的toeclipse \ javaso解释为什么会发生这种情况如何解决这个问题会有很大帮助!
#1 热门回答
配置Eclipse IDE只需3个步骤:
注意:更新源查找路径后,你必须停止并重新启动调试会话。否则,具有缺失源的文件将继续显示"缺少源"。
编辑源查找选择编辑源查找...命令[编辑源查找]以打开源路径对话框,该对话框允许你更改所选调试目标的源查找路径。
IMPORTANT在最后一步之后重新启动Eclipse。
#2 热门回答
症状完美地描述了找到的类没有关联(或分配)源的情况。
你可以在Preferences> Java> Installed JRE中关联JDK类的源。如果JRE(不是JDK)被检测为要使用的默认JRE,那么你的JDK类将没有附加的源。请注意,并非所有JDK类都提供了源,其中一些仅以二进制形式分发。
手动添加的项目构建路径中的类要求你手动附加关联的源。源可以驻留在zip或jar文件中,工作区中或文件系统中。 Eclipse将扫描zip,例如,你的源不必位于存档文件的根目录中。
来自其他插件(maven,PDE等)的依赖项的类。在这种情况下,由插件决定如何提供源。 PDE将要求每个插件都有相应的XXX.source包,其中包含插件的源代码。可在此处和此处找到更多信息。如果可用,m2eclipse可以获取Maven依赖项的源和javadoc。这个功能应该启用m2eclipse首选项(该选项被命名为"Download source and javadocs"。对于其他插件,你需要查阅他们的文档
从项目加载的类将自动与项目中的源匹配。
但是,如果Eclipse仍然建议你附加源代码,即使我正确设置了我的类及其来源,该怎么办:
这几乎总是意味着Eclipse从不同的地方找到了比你想象的更多的类。检查源查找路径以查看它可能在哪里获得错误的类。根据你的发现更新路径。
当遇到断点时,Eclipse根本找不到任何东西:
当你的源查找路径不包含当前在运行时加载的类时,会发生这种情况。即使类在工作空间中,它也可以对启动配置不可见,因为Eclipse严格遵循源查找路径并仅附加当前已调试的项目的依赖项。
一个例外是PDE中的调试包。在这种情况下,由于运行时由多个项目组成,这些项目不必相互声明依赖项,因此Eclipse将自动在工作空间中查找该类,即使它在源查找路径中不可用。
我点击断点时看不到变量,或者只是打开源,但是没有选择断点线:
这意味着在运行时中,JVM或类本身没有必要的调试信息。每次编译类时,都可以附加调试信息。为了减少类的存储空间,有时会省略此信息,这使得调试此类代码变得很麻烦。你唯一的机会是尝试在启用调试的情况下重新编译。
Eclipse源查看器显示的行不同于实际执行的行:
它有时可以显示也执行空白空间。这意味着你的源与类的运行时版本不匹配。即使你认为这是不可能的,也是如此,因此请确保设置正确的来源。或者你的运行时匹配你的最新更改,具体取决于你要执行的操作。
#3 热门回答
Eclipse调试与程序实际加载的一起工作。
你描述的症状听起来像是在项目中找不到的类,但是在你正在使用的项目之前没有找到调试信息的分发jar中。
出现这种情况有几个原因,但要查看找到显示此行为的类的位置(在导航窗格中查找以识别它)。你很可能需要更改项目的构建路径以避免使用此jar并让JVM使用该项目。
编辑:请注意,从2018年开始,通常使用像Maven这样的构建框架,其中构建路径由m2e插件管理,因此这个问题应该比问题时更频繁。