为什么我的Eclipse项目有幻影debugging器断点?
我有一个小的项目,在Eclipsedebugging器中运行时,似乎总是在FileInputStream.class行106中停止,在那里打开文件。 没有设置断点,但Eclipse的行为就像在这里有一个断点一样。 如果我清除所有断点,它仍然发生。
在同一个Eclipse工作区中,我有另一个更大的项目,它不会遇到这个问题。
我只是将我的旧Linux机器的小型项目移到了我的新Windows机器上,在那里我继续在Ganymede Eclipse中看到这个问题。 这个问题在整个操作系统和Eclipse版本中依然存在,但显然不是跨越项目。 我不明白! 我通过这个项目的目录中的每一个文件,并找不到任何可能是一个文件导致Eclipse停止在FileInputStream中的任何文件。
更多信息 :表观断点实际上不是FileInputStream的第106行; 它似乎是FileNotFoundException的exception断点,是从FileInputStream中该行调用的本地代码抛出的。 但是,我似乎没有任何断点。 exception断点是在别的地方定义的吗?
你有没有试图取消select
Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions
? (例如在这个线程中提到的 )
为什么Eclipse以这种方式工作?
它回溯到2002年 ,当断点对象层次被剥离。
为了设置断点,使用旧的API,客户端需要Java模型对象 – 比如
IType
,IField
等。
使用新的API,debugging模型所需的全部内容是types名称,字段名称等这允许客户端在Java模型对象不可用时设置断点。
客户端现在指定将断点关联的资源(在将其约束到关联的Java模型资源之前)。断点现在也可以“隐藏” 。 也就是说,他们不需要在断点pipe理器中注册。
断点也可以被select性地持久化(标记只允许所有的标记types不被持久化)。
这使debugging模型更加灵活,并为客户提供更多的构build块。这也简化了我们的Javadebugging实现的一部分 – 例如, “
suspend on any uncaught exception
”的function,只是为名为“java.lang.Throwable
”的types设置断点,而不是特定项目中的特定IType
。
断点没有注册到断点pipe理器(即隐藏 ) – 它只被一个客户知道和使用 。
另一个例子是“run to line breakpoint
”。IJavaRunToLineBreakpoint
已被删除,因为其特殊function不再需要。 现在,Javadebugging用户界面简单地创build了一个隐藏的“非线程断点”,非持久化,命中计数为1.这是向客户端提供构build块的示例。
我有一个类似的问题,但接受的解决scheme不适合我。 我正在做Eclipse Android开发,并设置了一些断点,然后取消设置。 即使我禁用了Eclipse,Eclipse仍然在这些幻象断点处停止执行。 我的解决scheme是打开断点窗口:
窗口>显示视图>其他…
debugging>断点
然后右键单击任何断点,然后select“全部删除”
不幸的是,你必须重置所有有效的断点,但是这对我来说很有效,并且阻止了很多焦虑和挫折。
一些照片来引导别人:
对于那些没有find其他解决scheme有用的人,我发现我的个人解决scheme,我的问题。 我使用通过在工作区中构build另一个项目而生成的.jar库。 如果我将.java中的断点设置到库项目中,那么在debugging最终项目时会触发断点。 但是,当debugging器暂停执行时,会显示具有自己的断点的.class文件 ,因此设置到.java文件中的断点在此处不显示!
解决scheme:为了移除断点,你必须把断点移入库项目中的.java文件。
对于那些从以前的答案中找不到答案的人,他们可以试着解决我的问题。 这是我觉得类似于HAL9000问题/解决scheme
如果你有两个具有相同名字的类(在两个不同的项目中),那么这个类的断点也适用于另一个类。 它们都显示在“断点”窗口中。
解决scheme :如果您从类中删除断点(具有相同的名称),而您没有使用该断点,则将从正在debugging的类中删除断点。