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

时间:2015-01-24 21:52:49

标签: java eclipse debugging

假设我有一个班级

public class Foo
{
     public void doThing() { ...}
}

假设我有很多Foo的实例,但我对其中一个实例特别感兴趣。

我将如何"标记"该实例并设置一个"条件断点"在doThings只会停止标记实例? 是否有"内置"方式,特别是Eclipse调试器,这样做?

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

但很明显,这需要修改代码并添加一些样板,这并不总是可行的或者是好事。

3 个答案:

答案 0 :(得分:8)

是的,Eclipse中有实例断点。

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

Instance Breakpoints

弹出窗口会询问您要为该实例激活哪个断点。

Popup Selection

你选择并且已经完成了!

Done

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

我不知道任何"适当的"但是,一种方法是在第一次创建时在监视窗口中调用hashCode(),然后使断点也以hashCode()为条件。因此,每次运行时都需要更改断点 - 有点烦人,但它至少会为您提供一个可用于引用对象的常量值。 (当然,假设班级没有覆盖hashCode() - 如果你有很多具有相同哈希码的实例,那会让事情变得更加棘手。)