I am trying to track a change of a value using watchpoint in a Java program in Eclipse debugger. The class hierarchy is pretty complex and the value I am tracking is wrapped in container, which is used on many places.
To be more specific, there is a container SizeRequirement
, which has a property minimum
, which I am tracking. This class is used by many layout managers on many places for many components to define requirement for component's sizes. I need to catch exact call, where the value changes/is set for one specific layout manager and one specific component in it. Is it possible to filter breakpoints by caller? I will try to explain the problem using some abstract code:
class ValueContainer {
public String value;
}
class A {
private ValueContainer valueContainer;
public A () {
valueContainer = new ValueContainer();
valueContainer.value = "setByA";
}
}
class B {
private ValueContainer valueContainer;
public B () {
valueContainer = new ValueContainer();
valueContainer.value = "setByB";
}
}
I set a watchpoint on value
and I only want breakpoint to suspend only when the value
is set by class A and ignore calls by B.
To make things worse, class SizeRequirement
is part of swing library and is deeply integrated in code, so I cannot use inheritance to replace it by some child on some exact place where I want to track it.
EDIT
So this is what I used as conditional breakpoint condition. Believe or not, it works. :)
StackTraceElement[] arr = Thread.currentThread().getStackTrace();
boolean contains = false;
for(StackTraceElement e : arr) {
if (e.getClassName().contains("A")) {
contains = true;
break;
}
}