javaの特定のスレッドの呼び出しトレースを出力する方法はありますか?Javaの呼び出しトレース
スタックトレースは必要ありません。私はトレースのための各オブジェクトの呼び出しのシーケンスが欲しいです。すべてのスレッド内のすべてのオブジェクトの各メソッド呼び出しのための行を表示し
javaの特定のスレッドの呼び出しトレースを出力する方法はありますか?Javaの呼び出しトレース
スタックトレースは必要ありません。私はトレースのための各オブジェクトの呼び出しのシーケンスが欲しいです。すべてのスレッド内のすべてのオブジェクトの各メソッド呼び出しのための行を表示し
btraceがあり、この種の動作に使用できます。
Runtime.traceMethodCalls()
、
あなたは、基本的局面は、現在のスレッドがあることを意味したかどうかを決定することができる何らかの形のアスペクト指向プログラミングをしたいと思いますロギングコール。 (代わりに明示的にすべてのメソッドにログを記録するのは苦しいでしょう)
Javaには、AspectJとSpringなど多くのAOPフレームワークがあります(もちろん、SpringはAOP以上のものです)。
にすべてのメソッド呼び出しを適用することは難しいかもしれませんが...私はAspectJについての経験はありませんが、Spring AOPは基本的にコンポーネントの周りのAOPを有効にするように設計されています。 Springにとって効果的に知られていないクラスは、簡単には変更できません。私はSpring AOPを使ってからしばらくしてきました。それ以降は事が起こっている可能性があります:)
呼び出しトレースを持つ新しいThrowableオブジェクトを作成することができました。また、いくつかの文字列操作を使用して、コールスタックを取得できます。
Throwable t = new Throwable();
System.out.println(t.getStackTrace()[1].toString());
この方法で情報を取得するかどうかはわかりませんが、それは良い方法ですか。 :)
痛みを伴い、デバッグ中にローカルトレースに使用するのが遅くなります。 – glmxndr
あなたはこの面白いかもしれないと思います。これは、実際に出力を記録するslf4jフレームワークを使用して、メソッドへの入口と出口のロギングを追加するJavaエージェントです。そして、それはあなただけに興味がある、そのスレッドをプリントアウトへのロギングフレームワークを構成するの問題です
http://www.slf4j.org/extensions.html#javaagent
。(ただ明示されるように:1)私は2)それは私のために働く、それを書いた:) )
WOW。マインド=ブローン! – JavaRocky
絶対に素晴らしい!それを試して、それは素晴らしい:)この非常に便利な拡張機能のおかげで働いた! – stratwine
これをアンドロイドプロジェクトでどうやって使うことができますか? – RegisteredUser
、あなたは出力にトレースメソッド呼び出しは思えない窓にhere
日のホットスポットのVMから取得することができます。私は 'java_g'でJavaデバッグを実行する必要があると読んだ。何か案は? – JavaRocky
はい、私にとって 'Runtime.getRuntime()。traceMethodCalls(true);'は何もしません。 'javac'や' java'に引数を渡す必要がありますか? –
Javaバージョン "1.8.0_111"のままではまだありません –