我正在尝试使用 Eclipse 调试器中 Java 程序中的观察点来跟踪值的变化。类层次结构非常复杂,我正在跟踪的值被包装在容器中,该容器在许多地方都使用过。
更具体地说,有一个 container SizeRequirement
,它有一个 property 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;
}
}