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";
}
}
ウォッチポイントをオンに設定し、クラス A によって設定され、B による呼び出しを無視するvalue
場合にのみ、ブレークポイントを一時停止するようにします。value
さらに悪いことに、クラスSizeRequirement
はスイング ライブラリの一部であり、コードに深く統合されているため、継承を使用して、追跡したい正確な場所にある子に置き換えることはできません。
編集
これは、条件付きブレークポイント条件として使用したものです。信じられないかもしれませんが、うまくいきます。:)
StackTraceElement[] arr = Thread.currentThread().getStackTrace();
boolean contains = false;
for(StackTraceElement e : arr) {
if (e.getClassName().contains("A")) {
contains = true;
break;
}
}