我想在Eclipse調試器中使用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;
}
}
這不會掛起VM,但是隻要執行那段代碼就會打印堆棧跟蹤。 – Sentry
@Sentry澄清的答案 – artbristol
現在有道理:) – Sentry