EclipseデバッガのJavaプログラムでウォッチポイントを使用して値の変更を追跡しようとしています。クラス階層はかなり複雑で、私が追跡している値は、多くの場所で使用されているコンテナにラップされています。Java Eclipseの呼び出し元による条件付きブレークポイント
具体的には、コンテナSizeRequirement
があります。このコンテナには、追跡対象のプロパティminimum
があります。このクラスは、多くのコンポーネントが多くの場所で多くのレイアウトマネージャによって使用され、コンポーネントのサイズの要件を定義します。私は正確な呼び出しをキャッチする必要があります。値の変更は、特定のレイアウトマネージャとその中の特定のコンポーネントに対して設定されます。呼び出し元によってブレークポイントをフィルタリングすることは可能ですか?私はvalue
にウォッチポイントを設定し、私は唯一のブレークポイントがvalue
は、クラスAによって設定されている場合にのみ、サスペンドと
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";
}
}
:私はいくつかの抽象コードを使用して問題を説明しようとします
さらに悪いことに、クラスSizeRequirement
はスイングライブラリの一部であり、コードに深く組み込まれているため、私はそれを追跡したいと思っている場所で子供の代わりに継承を使うことはできません。
EDIT
だから、これは私が条件付きブレークポイントの条件として使用するものです。信じられない、それは動作します。 :)
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