我知道如何为字段设置观察点(在变量视图中右键单击变量 - > 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可能会从我不知道的其他位置进行修改,在这种情况下,调试器也应该停止。
答案 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约束而无用。