Условная точка останова вызывающей стороной в затмении Java
Я пытаюсь отслеживать изменение значения с помощью точки наблюдения в программе Java в отладчике Eclipse. Иерархия классов довольно сложна, и отслеживаемое мной значение заключено в контейнер, который используется во многих местах.
Чтобы быть более конкретным, есть контейнерSizeRequirement
, который имеет свойствоminimum
, который я отслеживаю. Этот класс используется многими менеджерами компоновки во многих местах для многих компонентов, чтобы определить требования для компонента.Размеры. Мне нужно поймать точный вызов, где значение изменяется / устанавливается для одного конкретного менеджера макета и одного конкретного компонента в нем. Можно ли отфильтровать точки останова по вызывающему абоненту? Я попытаюсь объяснить проблему, используя некоторый абстрактный код:
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";
}
}
Я установил точку наблюдения наvalue
и я хочу, чтобы остановка была приостановлена только тогда, когдаvalue
устанавливается классом A и игнорирует вызовы B.
Хуже того, классSizeRequirement
является частью библиотеки Swing и глубоко интегрирован в код, поэтому я не могу использовать наследование, чтобы заменить его каким-либо дочерним объектом в каком-то конкретном месте, где я хочу его отслеживать.
РЕДАКТИРОВАТЬ
Так что это то, что я использовал как условное условие точки останова. Верьте или нет, это работает. :)
StackTraceElement[] arr = Thread.currentThread().getStackTrace();
boolean contains = false;
for(StackTraceElement e : arr) {
if (e.getClassName().contains("A")) {
contains = true;
break;
}
}