为什么我的Eclipse项目有幻像调试器断点?

时间:2009-04-06 20:57:50

标签: eclipse debugging breakpoints

我有一个小项目,当在Eclipse调试器中运行时,似乎总是停在FileInputStream.class第106行,其中文件被打开。没有设置断点,但Eclipse的行为就像我在这里有断点一样。如果我清除所有断点,它仍然会发生。

我在同一个Eclipse工作区中有第二个更大的项目,没有遇到这个问题。

我刚刚将旧的Linux机器从旧的Linux机器上移开,我在Europa Eclipse中开发了这个问题并将此问题发送到我的新Windows机器上,我继续在Ganymede Eclipse中看到问题。问题在操作系统和Eclipse版本中持续存在,但显然不是跨项目。我不明白!我浏览了这个项目目录中的每个文件,找不到任何可能导致Eclipse在FileInputStream中停止的文件。

更多信息:明显断点实际上不适用于FileInputStream的第106行;它似乎是FileNotFoundException的异常断点,从FileInputStream中从该行调用的本机代码抛出。但同样,我似乎根本没有任何断点。是否在其他地方定义了异常断点?

5 个答案:

答案 0 :(得分:112)

您是否尝试取消选择

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions

? (例如mentioned in this thread

alt text

为什么Eclipse会这样工作?

goes back to 2002,当剥离断点对象层次结构时。

  

为了使用旧API设置断点,客户端需要Java模型对象 - 例如ITypeIField等。
  使用新API,调试模型所需的只是类型名称,字段名称等。

     

这允许客户端在Java Model Objects不可用时设置断点   客户端现在指定用于关联断点的资源(在我们将其约​​束到关联的Java模型资源之前)。

     

断点现在也可以“隐藏”。也就是说,它们不需要在断点管理器中注册   断点也可以选择性地保留(标记只允许所有/不保留标记类型)   这使得调试模型更加灵活,并为客户提供更多构建块。

     

这也简化了Java调试实现的某些部分 - 例如,功能“suspend on any uncaught exception”,只是为名为“java.lang.Throwable”的类型设置断点,而不是特定项目中的特定IType   断点未在断点管理器中注册(即隐藏) - 只有一个客户端知道并使用。   另一个例子是“run to line breakpoint”。 IJavaRunToLineBreakpoint已被删除,因为不再需要其特殊功能。现在,Java调试ui只是创建一个隐藏的,非持久的并且命中数为1的“行断点”。这是向客户提供构建块的示例。

答案 1 :(得分:37)

我遇到了类似的问题但是接受的解决方案对我没有用。我正在进行Eclipse Android开发,并设置了一些断点,后来取消了它们。即使我禁用它们,Eclipse也会在这些幻像断点处停止执行。我的解决方案是打开Breakpoints窗口:

窗口>显示视图>其他...

调试>断点

然后右键单击任何断点并选择“全部删除”

不幸的是,你必须重置所有有效的断点,但这对我有用,并且防止了很多焦虑和挫折。

引导他人的一些照片:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

答案 2 :(得分:5)

对于那些没有找到其他解决方案有用的人,我找到了解决问题的个人方法。我使用.jar库,它是通过在工作区中构建另一个项目而生成的。如果我在.java中将断点设置到库项目中,那么在调试最终项目时将触发断点。但是,当调试器暂停执行时,会显示.class文件,该文件有自己的断点,因此此处未显示设置到.java文件中的断点!

<强>解决方案: 要删除断点,必须将断点删除到库项目中的.java文件中。

答案 3 :(得分:2)

我遇到了一个问题,其中源文件具有不存在的断点的持久标记。我尝试清理项目,进行完整构建,重新启动Eclipse - 没有任何效果。

我开始挖掘Eclipse元数据,找到了项目.markers文件。删除该文件最终解决了问题。

对于遇到此问题的其他人,请打开工作区目录,然后导航到.metadata / .plugins / org.eclipse.core.resources / .projects / your project,然后重命名/删除文件。标记。

例如,如果您的工作区文件夹是〜/ workspace,并且您的项目名为Foo,则可以执行以下操作:

$ mv ~/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/Foo/.markers ~/safe.Foo.markers

答案 4 :(得分:0)

对于那些没有从以前的答案中找到解决方案的人,他们可以尝试解决我问题的方法。我认为类似于HAL9000问题/解决方案

如果你有两个具有相同名称的类(在两个不同的项目中),那么一个断点也适用于另一个。它们都显示在&#34; Breakpoints&#34;窗口。

解决方案:如果从类中删除断点(使用相同的名称),则表示您正在调试的类中删除断点。