Eclipse调试“找不到源”

时间:2009-12-25 00:28:00

标签: java eclipse debugging

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

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

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

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

[编辑]

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

6 个答案:

答案 0 :(得分:20)

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

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

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

  1. 点击“断点”窗口 在调试的底部 屏
  2. 右键点击“NullPointerException”
  3. 未选中“抓住”
  4. 这阻止了调试器在捕获的NullPointerException期间暂停程序流。

    alt text http://www.SharpDetail.com/p/so_breakpoint.gif

答案 1 :(得分:10)

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

如果你回到callstack中的一行,你应该看到导致JUnit异常的行(你的源代码)。
这应该足以调试你的代码。


要将源与JUnit相关联,您可以在项目的库中添加junit.jar,并将junit-x.y.z-src.jarjunit-x.y.z.jarlike so相关联:

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

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

<classpathentry kind="lib" path="junit-x.y.z.jar" sourcepath="junit-x.y.z-src.jar">

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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