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

ski*_*ppy 72 eclipse debugging breakpoints

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

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

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

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

Von*_*onC 113

你有没有尝试取消选择

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions
Run Code Online (Sandbox Code Playgroud)

?(例如,在这个帖子中提到)

替代文字

为什么Eclipse以这种方式工作?

可以追溯到2002年,当时剥离了断点对象层次结构.

为了设置一个断点,与旧的API,客户端所需的Java模型对象-比如IType,IField
有了新的API,所有由调试模型所需的类型名,字段名等.

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

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

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


Mar*_*eel 37

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

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

调试>断点

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

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

一些图片引导他人:

将断点窗口添加到Eclipse

全部删除(断点,右键单击)


HAL*_*000 5

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

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