【发布时间】:2013-01-01 03:09:42
【问题描述】:
我正在尝试在 Eclipse 调试器中使用 Java 程序中的观察点来跟踪值的变化。类层次结构非常复杂,我跟踪的值被包装在容器中,在很多地方都使用过。
更具体地说,有一个容器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 上设置了一个观察点,并且我只希望断点仅在 A 类设置 value 并忽略 B 的调用时暂停。
更糟糕的是,SizeRequirement 类是 swing 库的一部分,并且深度集成在代码中,所以我不能使用继承在我想要跟踪的某个确切位置用某个子代替换它。
编辑
所以这就是我用作条件断点的条件。信不信由你,它有效。 :)
StackTraceElement[] arr = Thread.currentThread().getStackTrace();
boolean contains = false;
for(StackTraceElement e : arr) {
if (e.getClassName().contains("A")) {
contains = true;
break;
}
}
【问题讨论】:
标签: java eclipse debugging conditional-statements watchpoint