Eclipse调试器,为特定(!)对象的字段设置watchpoint

时间:2015-08-05 14:17:34

标签: java eclipse debugging

我知道如何为字段设置观察点(在变量视图中右键单击变量 - > watch)。但是执行暂停访问/修改该类型的所有对象的该字段。

如何在访问或修改SPECIFIC OBJECT的某个字段时暂停执行?

更清楚地说明:

class A { int a; }

public static void main(String[] args) {

    List<A> myList = new ArrayList<A>();

    // assume a lot of A's are added here

    A interestingA = new A();
    myList.add(someIndex, interestingA);

    for(A a : myList) {
        a.a = 42; // debugger shall stop here, but only, 
                  // if it is the interesting A
    }
}

显然我不能在那里设置断点,因为我必须点击继续很多次。此外,interestingA可能会从我不知道的其他位置进行修改,在这种情况下,调试器也应该停止。

2 个答案:

答案 0 :(得分:0)

您需要一种方法来识别要调试的实例。然后,您可以为断点添加条件。

例如,

class A
    {
    int a;
    final String name;
    public A(final String name)
        { this.name = name; }
    }

public static void main(String[] args) {
    A a1 = new A("foo");
    A a2 = new A("bar");
    a1.a = 42; // debugger shall not stop here
    a2.a = 42; // but here, because I am interested in object a2
}

然后将"bar".equals(name)作为断点的条件。

答案 1 :(得分:0)

定义问题

我不得不说这实际上是两个问题;首先,如何让Eclipse停止,但只有当变量发生变化时才会停止,第二步是在哪里放置使用第一点技术的断点。

与其他答案中列出的其他链接一样,我对this question的回答详细介绍了&#34;如何&#34;部分但不是&#34;其中&#34;一部分。

建议解决方案

您可能需要使用&#39;查找所有参考文献&#39;为您提供引用变量的代码中的位置,并在这些行中放置断点,并在每个行中包含条件表达式。这有点暴力,但至少Eclipse可以为你做一些困难的部分(语义搜索)。

评论

顺便说一下,我多年来一直想要你所描述的功能。我确定我不是唯一一个发现某些逻辑失败的程序员,因为某个变量没有正确的值,但无法弄清楚值的变化位置。我不相信这个问题有一个很好的答案,而不在Eclipse中引入一种新类型的断点,它根据变量的变化停止执行任何地方。只要键入它就会让我意识到效率会有多低,因为变量必须在每个JVM指令之后进行评估,我怀疑它会使调试变得如此受CPU约束而无用。