Eclipse调试“找不到源”

我刚开始使用Eclipse,所以对我很轻松;)。 但是在尝试调试JUnit测试用例时,我得到一个对话框,指出当我在我的测试方法的代码中到达这一行时找不到源:

Assert.assertEquals(1, contents.size()); 

我知道我应该去尝试从某个地方下载源代码,但我真的不想这样做,因为我没有兴趣进入JUnit代码。 我有JUnit运行时jar所以为什么Eclipse希望我拥有所有引用的工具源代码以调试我自己的代码(看起来有点傻)?

我的主要问题是,如果源不可用,我如何告诉Eclipse跳过此对话框并允许我继续调试自己的代码?

[编辑]

我已经找到了原因。 似乎Eclipse在内部JUnit代码抛出exception时似乎认为它需要源代码。 一般来说,无论如何都要告诉它它没有,只是让它抛出某种错误对话框而不是?

很长一段时间我都遇到了这个非常恼人的问题,但终于能够解决它了。 在我的例子中,在Java的Transformer.IsRuntimeCode(ProtectionDomain )函数中抛出了一个空指针exception。

我真的不需要知道这个,因为exception被捕获和处理,但eclipse会在每次发生这种情况时暂停调试,并告诉我源代码不可用。 结果,我不断地按下按钮继续执行代码。

为了防止这种情况发生,我:

  1. 单击调试屏幕底部的“断点”窗口
  2. 右键单击“NullPointerException”
  3. 未选中“抓住”

这阻止了调试器在捕获的NullPointerException期间暂停程序流。

替代文字http://www.SharpDetail.com/p/so_breakpoint.gif

抛出exception时,调试调用堆栈将显示JUnit源代码行。
但是,如果您没有JUnit的源代码,则不必担心。

如果你回调调用堆栈中的一行,你应该看到导致JUnitexception的行(源代码)。
这应该足以调试您的代码。


要将源与JUnit相关联,可以在项目的库中添加junit.jar ,并将junit-xyz-src.jarjunit-xyzjar , 如下所示 :

http://web.archive.org/web/20130227201940/http://img241.i_mageshack.us/img241/1412/eclipsejunitsrc.png

这将在项目的.classpath中生成如下行:

  

注意:实际上,这个classpathentry行中会有junit[...].jar文件的完整路径。 但您也可以使用Linked资源来避免.classpath文件中的固定值(完整路径)。

我有类似的问题。 我通过右键单击包浏览器中的项目文件夹并选择刷新来修复它。 代码源与调试器不同步,并对此进行了更正。 Transformer.IsRuntimeCode(ProtectionDomain)源找不到消息不再出现。

在单独的行上计算contents.size(),或者在方法上设置断点。

另请注意,Eclipse中的junit视图允许您导航堆栈跟踪。

使用步骤filter以避免单步执行… junit …包。 右键单击堆栈跟踪,然后选择Filter Package。 您可能必须先使用“使用步骤filter”打开过滤。 ~~~

我和另一个jar有类似的问题,即使我指向它会再次要求它。 我能够通过在ANT debug="on"debug="on"编译jar来解决它。