2011-07-20 21 views
1

私は大きなred5プロジェクトを持っており、ある時点で機能が実行されているようです。私はこの特定の関数がその時点で実行されていて、それを見つけることができなかったのを自分のコードで見つけることを試みました。私はそれを呼んでいるものを見つけたい。リフレクションスタックトレースの代わりに適切なスタックトレースを取得する方法は?

私はstackoverflowの答えを読んで、私は現在の位置のスタックトレース情報を表示するために次のものを見つけました。

StackTraceElement[] elements = Thread.currentThread().getStackTrace(); 
    for (int i=0;i<elements.length;i++) { 
     log.error(elements[i].toString()); 
    } 

と、私は次の出力を受け取っ:

java.lang.Thread.getStackTrace(Thread.java:1479) 
component.lobby.LobbyMysql.getChallenges(LobbyComponentMysql.java:76) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
org.apache.commons.beanutils.BeanMap.get(BeanMap.java:390) 
org.red5.io.amf.Output.writeObject(Output.java:357) 
org.red5.io.object.Serializer.writeObjectType(Serializer.java:300) 
org.red5.io.object.Serializer.writeComplex(Serializer.java:140) 
org.red5.io.object.Serializer.serialize(Serializer.java:86) 
org.red5.io.amf.Output.writeObject(Output.java:357) 
org.red5.io.object.Serializer.writeObjectType(Serializer.java:300) 
org.red5.io.object.Serializer.writeComplex(Serializer.java:140) 
org.red5.io.object.Serializer.serialize(Serializer.java:86) 
... 

私が実行されている関数の名前を得るかが、何らかの理由のためのトップレベルは反射クラスです。この特定の関数を呼び出す実際のメソッドを見つける方法はありますか?

私は私と一緒に負担してください:)

おかげ

+0

が答えること:ブレークポイントがヒットした場合は、特にこのレベルのまわり、中断されたスレッドのコールスタックで何が起こっているかを見てあなたのクラスのすべてのゲッターを呼び出して現在の状態を取得します。これは反射を使って行います。 – DaveJohnston

答えて

1

を明らかに、「実際の」コードは、リフレクションを使用してなので、それはあなたが見しようとしているものだJavaおよび反射にないんだけどスタックトレースに格納されます。

デバッグモードでコードを実行できる場合は、スタックトレースを出力する代わりにブレークポイントを使用します。それはそのメソッドを呼び出している理由は、私はそれがオブジェクトをシリアル化しようとしていると信じ、そのためである

java.lang.reflect.Method.invoke(Method.java:597) 
関連する問題