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

为什么我的Eclipse项目有幻象调试器断点?,eclipse,debugging,breakpoints,Eclipse,Debugging,Breakpoints,我有一个小项目,当在Eclipse调试器中运行时,它似乎总是停在FileInputStream.class第106行,在那里打开文件。没有设置断点,但是Eclipse的行为就像我在这里有一个断点一样。如果我清除了所有断点,它仍然会发生 我在同一个Eclipse工作区中有第二个更大的项目,它没有遇到这个问题 我只是把这个较小的项目从我在Europa Eclipse中开发的旧Linux机器上转移到我的新Windows机器上,在那里我继续看到Ganymede Eclipse中的问题。这个问题在操作系统

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

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

我只是把这个较小的项目从我在Europa Eclipse中开发的旧Linux机器上转移到我的新Windows机器上,在那里我继续看到Ganymede Eclipse中的问题。这个问题在操作系统和Eclipse版本之间持续存在,但显然不在项目之间。我不明白!我浏览了该项目目录中的每个文件,但找不到任何可能是指示Eclipse在FileInputStream中停止的文件


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

是否尝试取消选择

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions
??(例如,作为例子)

为什么Eclipse会这样工作?

当断点对象层次结构被剥离时,它将被删除

为了设置断点,使用旧API,客户端需要Java模型对象,例如
IType
IField
,等等
使用新的API,调试模型只需要类型名、字段名等

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

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

这也简化了Java调试实现的某些部分—例如,功能“
在任何未捕获的异常上挂起”
”,只是为名为“
Java.lang.Throwable
”的类型设置断点,而不是特定项目中的特定
IType

断点未在断点管理器中注册(即隐藏)-它仅为一个客户端所知和使用
另一个例子是“
运行到行断点”。
IJavaRunToLineBreakpoint
已被删除,因为不再需要它的特殊功能。现在,Java调试ui只创建一个隐藏的、非持久化的、命中率为1的“行断点”。这是一个向客户机提供构建块的示例


我有一个类似的问题,但被接受的解决方案并不适合我。我正在进行EclipseAndroid开发,设置了一些断点,后来又取消了它们。即使我禁用了它们,Eclipse仍在这些虚拟断点处停止执行。我的解决方案是打开断点窗口:

窗口>显示视图>其他

调试>断点

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

不幸的是,您必须重置所有有效的断点,但这对我来说很有效,并且避免了很多焦虑和挫折

一些图片可以指导其他人:


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

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

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

如果您有两个名称相同的类(在两个不同的项目中),则在其中一个上设置断点,也在另一个上应用断点。它们都显示在“断点”窗口中


解决方案:如果您从类中删除断点(使用相同的名称),并且您没有使用它,则会从正在调试的类中删除断点。

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

我仔细研究了Eclipse元数据,找到了projects.markers文件。删除那个文件最终解决了这个问题

对于其他有此问题的人,请打开工作区目录,然后导航到.metadata/.plugins/org.eclipse.core.resources/.projects/your项目,然后重命名/删除file.markers

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

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

我自己也在想这个问题,我经常发现自己停在断点处,我可以发誓我已经删除了。只是添加了一些关于“在任何未捕获异常时暂停”功能的解释,as requestedIt有助于检测那些未经检查的运行时异常,这些异常没有被您的代码破坏。我遇到了相同的行为,我没有取消选中“suspend execut”