假设我有一个班级
public class Foo
{
public void doThing() { ...}
}
假设我有很多Foo
的实例,但我对其中一个实例特别感兴趣。
我将如何"标记"该实例并设置一个"条件断点"在doThings
只会停止标记实例?
是否有"内置"方式,特别是Eclipse调试器,这样做?
目前,我必须在Foo
类中手动创建一个布尔标志,默认情况下将其设置为false,并根据doThings
中的条件断点创建一个条件断点。
然后当我遇到感兴趣的对象时,我会通过在true
窗口中执行setter代码将标志设置为Display
。
但很明显,这需要修改代码并添加一些样板,这并不总是可行的或者是好事。
答案 0 :(得分:8)
是的,Eclipse中有实例断点。
您必须在所需的类中放置一个公共断点,然后在变量面板中右键单击该实例并选择 Instance Breakpoints 。
弹出窗口会询问您要为该实例激活哪个断点。
你选择并且已经完成了!
答案 1 :(得分:2)
不是最干净的方法,但您可以在实例的默认Object#toString
输出上设置条件断点。
获取实例的默认toString()
结果后,在doThing
方法中添加类似以下内容作为断点条件:
this.toString().equals("Foo@184ec44")
答案 2 :(得分:1)
我不知道任何"适当的"但是,一种方法是在第一次创建时在监视窗口中调用hashCode()
,然后使断点也以hashCode()
为条件。因此,每次运行时都需要更改断点 - 有点烦人,但它至少会为您提供一个可用于引用对象的常量值。 (当然,假设班级没有覆盖hashCode()
- 如果你有很多具有相同哈希码的实例,那会让事情变得更加棘手。)