在java中为特定对象(而不是该类型的所有实例)设置(方法)断点

在java中为特定对象(而不是该类型的所有实例)设置(方法)断点,java,eclipse,debugging,Java,Eclipse,Debugging,假设我有一节课 public class Foo { public void doThing() { ...} } 假设我有很多Foo的实例,但我只对其中一个特别感兴趣 我如何“标记”该实例并在doThings中设置一个“条件断点”,该断点将仅对标记的实例停止? 是否有一种“内置”方法,特别是通过Eclipse调试器来实现这一点 目前,我必须在Foo类中手动创建一个布尔标志,将其默认设置为false,并基于doThings中的设置创建一个条件断点。 然后,当我遇到感兴趣的对象时,我会

假设我有一节课

public class Foo
{
     public void doThing() { ...}
}
假设我有很多
Foo
的实例,但我只对其中一个特别感兴趣

我如何“标记”该实例并在
doThings
中设置一个“条件断点”,该断点将仅对标记的实例停止? 是否有一种“内置”方法,特别是通过Eclipse调试器来实现这一点

目前,我必须在
Foo
类中手动创建一个布尔标志,将其默认设置为false,并基于
doThings
中的设置创建一个条件断点。 然后,当我遇到感兴趣的对象时,我会通过在
显示
窗口中执行setter代码,将标志设置为
true


但很明显,这需要修改代码并添加一些样板文件,这并不总是可能的,也不是一件好事。

我不知道有什么“正确”的方法,但有一种方法是在第一次创建时在监视窗口中调用
hashCode()
,然后使断点以
hashCode()为条件
。因此,您需要在每次运行时更改断点-这有点烦人,但它至少会给您一个常量值,您可以使用它来引用对象。(当然,这是假设类不重写
hashCode()
,如果您有许多实例使用相同的哈希代码,这会使事情变得更棘手。)

不是最干净的方式,但您可以在实例的默认
对象#toString
输出上设置条件断点

获取实例的默认
toString()
结果后,在
doThing
方法中添加如下内容作为断点条件:

this.toString().equals("Foo@184ec44")

是的,Eclipse中有实例断点

您必须在所需的类中放置一个公共断点,然后在“变量”面板中,右键单击实例并选择“实例断点”

弹出窗口将询问您希望为该实例激活哪个断点

你选择了,它就完成了


我不确定这是否是您所要求的,无论如何,该功能已经提供很长时间了。开始调试,当断点在所需的对象实例上停止时,单击调试变量视图中的“this”,然后单击“instance breakpoints”;您将获得活动实例的列表,并可以选择对其进行限制breakpoint@guido这听起来像是他对我的要求。您应该添加它作为答案。@erickson我不确定,因为这只在启动调试会话后的运行时起作用,并且实例已经可用,所以他似乎想在编译时确定它之前是哪个实例。这取决于
toString
是否被覆盖。谢谢你的回答!