4

呼び出されたメソッドを表示するためのリフレクションのようなソリューションが欲しいのですが。

例:

public class Foo {
    public void bar() {
         new Y().x();
    }
}

public class Y {
    public void x() {
    } 
} 

public class Main {
    public static void main(String[] args) {
        // SETTING UP THE MAGIC
        new Foo().bar(); 
        new Y().x();
    }
}

出力は次のようになります。

1. Foo.bar
   1.2 Y.x
2. Y.x

最適には、メソッドが呼び出されるたびに起動されるイベントハンドラーが存在する可能性があります(一部の情報はパラメーターとして渡される可能性があります)。

PS:これを本番環境で使用したくありません。ダミーのコピー&ペーストなしでスケルトンアプリに出力を表示するためにのみ必要です。

4

2 に答える 2

7

私はaspectjを使用して、メソッド呼び出しごとにログメッセージを書き込むアスペクトを定義します。ここに例があります:AspectJを使用したJavaメソッド実行のトレース。またはここ:AspectJでのロギング

このソリューションの利点は、コードに変更を加える必要がないことです。あなたはaspectjに入るのに少し時間が必要ですが、それはあなたの要件を非常によく満たしています。

于 2013-03-14T13:09:00.407 に答える
1

コードを汚染せずにこれを実現したい場合は、プロファイラーエージェントを構築する必要があります。

この記事を見てください、それはそれを行う方法を示しています。具体的には、その記事の下位にあるプロファイリングの側面を見てください。

リスト2は、JVMがメソッドに出入りするたびに、クラス名、メソッド名、およびタイムスタンプを出力するために使用できるプロファイリングの側面です。

于 2013-03-14T13:11:48.987 に答える