我知道这个问题以前已经被问过很多次了,但是没有一个建议的解决方案能解决我的问题(或者我没有正确地实现它们)。
我正在为OpenFire开发一个插件,当我在插件源代码中设置断点时,Eclipse报告"Source not found"。JAR的构建与OpenFire服务器的构建是分开的。我尝试过添加JAR并指定源代码目录,但没有成功。
下面是我遵循的流程:当我遇到断点时,我会依次单击"编辑源代码查找路径"、"添加"、Java库、用户库,然后单击用户库,添加我的库(尝试了"添加JAR"和"添加外部JAR"),然后指定包含源代码的文件夹。
- 通过选择"文件系统目录"而不是"Java库"来添加源
- 通过选择"工作区文件夹"添加
- 在项目浏览器中,将插件的源代码添加到Java构建路径
- 在项目浏览器中,将我的JAR添加为库并指定源附件
提前感谢您的任何建议。
7条答案
按热度按时间kxe2p93d1#
就我个人而言,我对Eclipse JDT没有什么好的经验,在遇到断点时添加源文件夹。我总是更喜欢在调试之前添加源文件夹:
1.选择项目/属性/库
1.选择您的库并“编辑...”source attachment
1.选择相应的源文件夹或包含包的zip/jar文件夹
之后,您应该能够打开虚拟“Referenced Libraries”文件夹中的源文件(直接位于项目中的“JRE System Library”文件夹下),或者在JDT编辑器中打开对链接类文件的引用时打开。如果您能够访问源文件,那么您至少也应该能够在断点处停止并查看相应的源文件。
否则,您必须再次检查源文件夹是否确实有效:源文件夹或源归档文件必须包含库的根包名称的文件夹(例如JDK文件夹中默认的Java“src.zip“在其根目录下也包含相应的“java”文件夹)。如果有疑问,请解压缩归档文件并选择您感兴趣的包的父文件夹-有时源归档文件可能很乱或与JDT不兼容。
如果这一点已经得到保证,但仍然不起作用,那么很可能是您链接的源文件夹与库的编译版本不对应。通常JDT可以很好地处理这种不一致,但是如果您试图打开一个与相应的类文件完全不同的源文件,您将遇到问题。在这种情况下,我建议您下载库的正确源版本,或者从源代码重新编译库(如果所有其他操作都失败)。
如果在JDT编辑器中打开引用的源文件可以正常工作,并且在调试期间输入断点时仍然无法打开源文件,则很可能是类文件是对应源文件的missing the line numbers。同样,在这种情况下,您必须从源文件重新编译库。
最后,也可以通过在启动配置的source选项卡中指定源文件夹或存档来覆盖默认的源代码查找,但如果构建路径配置正确,通常不需要这样做。
“源”选项卡定义调试Java应用程序时用于显示源的源文件的位置。默认情况下,这些设置派生自关联项目的生成路径。您可以在此处覆盖这些设置。
xjreopfe2#
这个问题困扰了我很长一段时间,但我最终解决了它。在我的例子中,Java的Transformer. IsRuntimeCode(ProtectionDomain)函数中的某个地方抛出了一个空指针异常。
我其实并不需要知道这些,因为异常已经被捕获和处理了,但是eclipse会在每次发生这种情况时暂停调试,并告诉我源代码不可用,结果,我不得不不断地按下按钮继续代码执行。
为了防止这种情况发生,我:
这可防止调试器在捕获NullPointerException.alt文本期间暂停程序流
(来源:SharpDetail.com)
这是另一个:
Eclipse不会崩溃。您正在尝试单步执行一个方法,而eclipse不知道在哪里可以找到源(*. java)文件,并通知您这一点。下面是如何告诉eclipse在哪里查找。请转到
在那里,选择您看到的列表中的所有jar文件,然后单击Source Attachment ...。
在显示的窗口中,选择文件www.example.com,它位于JDK文件夹中(如果在安装JDK时没有取消选中它)。src.zip, which is in your JDK folder (if you didn't uncheck it while installing the JDK). On the machine I'm on right now, that is
保存你所有的修改(可能重启eclipse),你就不会再看到那个错误了。
iezvtpos3#
结果发现这个解决方案是虎头蛇尾的。当Balder的建议不起作用时,我试着调试一个OpenFire的插件,它工作得很好。然后我从头开始创建了一个新的插件。并且除了将源代码添加到项目之外不执行任何操作(右键单击项目-〉新建-〉源文件夹)它也工作得很好。我不知道为什么Eclipse拒绝看到我的原始插件的源文件,但是我把我所有的代码和库都移到了新的插件上,调试工作正如预期的那样。
ctrmrzij4#
很多时候,当下载应用程序的二进制版本时,您将jar文件作为引用库放入Eclipse IDE中。通常通过配置构建路径来完成。但是二进制文件没有源文件。您有应用程序的二进制版本和源版本。
一个简单的方法是下载源代码库,你也可以使用maven来构建项目。保留一些,可能在你的项目工作区中。
现在,当看到类文件(从eclipse,jar爆炸),你可能会看到源代码没有找到,罚款....有一个按钮下面,点击它,一个新的窗口打开,并在那里选择添加外部文件夹。
将它引用到您下载的源代码(不是二进制代码)的src文件夹,并如上所述保存在某个地方,它将显示来自该文件夹的类细节。
nnt7mjpx5#
我通过执行以下操作修复了此问题:
点击菜单窗口-首选项-调试-步骤过滤并检查所有的软件包,如下图所示。
(Step Filtering)
然后,再次调试您的项目,就这样了。
此致,
q1qsirdb6#
在我的例子中,我在类声明中有一个断点,我的意思是在下一行。
public class GenerateInterface implements JavaCall {
因此,调试器在该行停止并显示以下消息:
未找到资源
我想是无意识地激活了那一行的断点。
7fyelxc57#
在我的例子中,我在使用TestNG和Selenium Java进行调试时发现未找到源代码。使用@Test方法的测试用例未能找到元素,但无法找到要抛出的异常,并在TextInvoker. invokeMethod处告诉我“未找到源代码”。
我通过将TestNG从6.14.3降级到6.11进行了修复。然后,我添加了另外两个依赖于Maven的库和TestNG。enter image description here
然后重启Eclipse再次调试,这次调试停在某个TestNG方法上,一直按F7直到调试结束,然后查看TestNG报告,发现错误(元素不可交互)。
希望这能对你的情况有所帮助!