0

Classデバッグの目的で、属性の変更を追跡する必要があります。

たとえば、次のクラスを考えてみましょう。

class Test {
    int myInt;
    String myString;
    ...

    public void setMyInt(int a) ...
    public void setMyString(String s) ...

    public printDebugLog();
}

void main() {
    Test t = new Test();
    t.setMyInt(5);
    t.setMyString("Hello");
    t.printDebugLog();
}

次のような出力をしたい:

myInt => 5
myString => Hello

簡単な解決策は、ログを即座に作成することです。つまり、次のように関数を追加しLogます。

void Log(String s) {
    System.out.println(s);
}

次に、セット関数を次のようにコーディングします。

void setMyString(String s) {
    myString = s;
    Log("myString => " + s);
}

これには、すべてのセット関数をさまざまに記述する必要があり、そのような問題に対するより良い解決策があるかどうか疑問に思います。たとえば、(可能であれば) SetValue2 つの変数を受け取り、最初の属性を 2 番目のオブジェクトの値に設定する関数を作成する方が簡単かもしれません。またはこのようなもの。

何か案が?

4

3 に答える 3

2

これを行うには、ロギングを実行する直交コードでクラスをラップする必要があります。

クラスはインターフェースを実装していないため、動的プロキシを使用できません。したがって、バイトコードエンジニアリングを使用するソリューションの1つを使用する必要があります。

私が知っている最も強力なソリューションはAspectJです。しかし、おそらくあなたもそれを必要としないでしょう。JavassistまたはCGLIb(クラスをラップするプロキシの作成を可能にするバイトコードエンジニアリングライブラリ)を使用できるため、ロギングを実行するコードを追加できます。

于 2012-10-15T14:00:17.030 に答える
1

AOPを使用して、setterメソッドをインターセプトし、呼び出されたときにログに記録できます。簡単なグーグルはあなたにいくつかの例を与えるはずです。

于 2012-10-15T14:00:54.517 に答える
-3

JPDAを介してデバッグする場合は 、監視したいフィールドに
ブレークポイントを作成できます。

于 2012-10-15T14:00:35.747 に答える