0

私の Java アプリケーションでは、特定のスレッドで実行されるさまざまなメソッドの名前 (および実際のランタイム クラス) を取得したいと考えています。通常のスタック トレースを取得する場合とは異なります。私は自分のプログラムの実行を監視しているようで、実行中にさまざまなメソッドの名前が表示されるのを見ています。

1 つの (素朴で実際には実行不可能な) 方法は、各メソッドの先頭に印刷メッセージを配置して、その名前 (クラス、行番号など) を出力することです。例外トレースを使用して、関連するすべての情報を出力できますが、各メソッドの先頭に少なくとも 1 行追加する必要があり、あまり洗練されていません。さらに、メソッドの先頭に行を追加するのを忘れたり忘れたりすると、そのメソッド名が表示されません。また、この戦略は将来性がありません。これを達成するのに役立つ計装/その他の手法はありますか?

4

2 に答える 2

1

以下の他の回答で言及されている AOP と Spring Listener とは別に、ASM や CGLib などのトリッキーなコード生成フレームワークを使用できます。実行時に各クラスを書き直し、これらの印刷命令をメソッドの先頭に追加するコードを記述します。しかし、それにはバイトコードに関するより深い知識が必要です。

于 2013-03-27T15:16:46.560 に答える
1

アスペクト指向プログラミングとそれを実装するすべてのフレームワークを確認する必要があります。

春を使用している場合は、まさにあなたが望むことを行う単純なトレースインターセプターを見ることができます: http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/aop/interceptor /SimpleTraceInterceptor.html

于 2013-03-27T15:14:22.663 に答える