Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse java调试:找不到源代码_Java_Eclipse_Debugging - Fatal编程技术网

Eclipse java调试:找不到源代码

Eclipse java调试:找不到源代码,java,eclipse,debugging,Java,Eclipse,Debugging,在eclipse中调试java应用程序时,我收到两种情况下的“未找到源代码”错误: 在已导入的其他项目中,单步进入文件 进入已安装maven存储库中的文件 文件就在那里,但eclipse不会进入它们,而是显示一个按钮“附加源文件” 我尝试附加(打开了一个对话框来定义一个变量),eclipse确实跳转到该文件,但调试器无法检查那里的任何变量。另外,手动附加每个依赖项的源代码是不实际的,因为在我的例子中有数千个依赖项文件 我是eclipse\java新手,所以解释一下为什么会发生这种情况以及如何

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

  • 在已导入的其他项目中,单步进入文件
  • 进入已安装maven存储库中的文件
文件就在那里,但eclipse不会进入它们,而是显示一个按钮“附加源文件”

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


我是eclipse\java新手,所以解释一下为什么会发生这种情况以及如何解决这一问题将非常有帮助

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


假设您有一个maven项目,并且依赖项的源代码已下载并在本地存储库中可用,您可能希望安装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依赖项的源代码和Javadoc(如果可用)。应该在Eclipse首选项中启用此功能(该选项的名称类似于“下载源代码和javadocs”)
    • 对于其他插件,您需要查阅它们的文档
  • 从项目中加载的类将自动与项目中的源匹配
但如果Eclipse仍然建议您附加源代码,即使我正确设置了类及其源代码,该怎么办

这几乎总是意味着Eclipse从不同于您预期的位置查找该类。请检查您的源代码查找路径,查看它可能从何处获取错误的类。根据您的发现更新路径

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

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

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

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

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

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


它有时也会显示执行的是空空间。这意味着源代码与类的运行时版本不匹配。即使您认为这不可能,但确实如此,因此请确保您设置了正确的源代码。或者您的运行时与最新更改相匹配,这取决于您尝试执行的操作。

我也有相同的p问题。在我的例子中,我禁用了窗口首选项Java调试[在未捕获异常时暂停执行]。然后,控制台向我显示了正确的错误:我的MySql用户没有访问数据库的权限。

您可能有依赖项accessi的源代码
mvn clean eclipse:eclipse