2016-11-23 3 views
0

メソッドの実行順序を知りたい。私は今私がメッセージ今行が実行されるたびに別のクラス(B)メソッド内でクラス(A)メソッドを呼び出すことは可能ですか?

Class B{ 
    printMessage(){ 
     System.out.println("method name and line number of callee"); 
    } 
} 

を印刷するクラスを持っているいくつかの方法

Class A{ 
    methodA(){ 
     line 1; 
     line 2; 
     . 
     . 
     . 
     line n; 
    } 
    methodB(){ 
     line a; 
     line b; 
     . 
     . 
     . 
     line n; 
    } 
} 

を持つクラスAを持っていると仮定すると、各ラインの後printMessage()を記述することなくprintMessage()たびline 1, line 2,...line nが実行されます実行する方法はありますmethodA()またはmethodB()です。

私はすでにデバッグ方法を知っていますが、私は便宜のためにいくつかのユーティリティクラスを書いています。ありがとうございました。

+7

実際はありません。アスペクト指向プログラミングとAspectJ、または動的コード書き換えを見ることができますが、実際にはこれはあなたがやりたいことではありません。あなたがそれをしたいと思うなら、あなたが方法を書く方法を再考する必要があります。 –

+2

デバッグのようなものです... – passion

+3

実行の各行を印刷する目的が何であるか尋ねますか? – swinkler

答えて

0

はい、できますが、これは非常に複雑で、Eclipseで使用しているデバッガを書き直すようになりました(使用していると仮定しています)かなり制限があります。私はこの質問で同等の答えを出しました:Trace java bytecode stream OPは各バイトコード行を書きたいと思っていました。興味のあるリンクがいくつかあります。

Class BClass A以外のプログラムになります。だから、あなたはProcessクラスのようなものでjdbを介してclassA(-gでコンパイルされた)で他のアプリを起動するclassBを持つ "myDirtyDebugger"というアプリを持っています。ブレークポイントを(methodA()の)開始点に設定し、 "myDirtyDebugger"をステップごとに実行して、各行を印刷します(これは、Processクラスで取得できます)。

あなたのアプリを起動するjdbを起動するJavaアプリケーションを作成すると、ひどい音です。 jdbはJVM TIのデバッグのためのデフォルト実装なので、JVM TIを使用して独自の(クリーンな)デバッガを作成することができます。私は専門的な目的のためにこれを知っている人がいなければそれをすることをお勧めしませんが、それは興味深いものの面白い演習になることができます。

これを開発することは、単体テストの作成よりも高速で、デバッガを使用すること、またはあなたのpruposeのための任意のログフレームワークを使用することは疑いの余地があります。


編集:私はあなたが望んでいた何をする簡単な方法がないだろうと思っ

。だから、私はそれをやるための難しい方法を書いたのです。しかし、私は考えました:コード生成フレームワークがあります。おそらく、コード解析/フレームワークツールの書き換えもありますか?さて、そこには:Editing/Modifying a .java file programmatically? (not the .class file)

のJavaフレームワークでは、ソースコード内でクラス、メソッド、および式を検索、読み取り、変更または生成することができます。したがって、あなたのメソッドのいずれかの式の間にログ(または別のクラスへの呼び出し)を追加することは、これではあまり難しくありません。サイトにはexamplesがいくつかあります。私は徹底的に読んでいなかったので、どうやってそれをするのかあなたには本当に説明できませんが、それは良いスタートです。

+0

ありがとうございますが、私はこのようなことを達成するために複雑なアプローチは必要ありません。 – Nazim

+0

@ Nazim私はあまりにもそうだと思っていますが、私はあなたの興味のあるもので質問を編集しました。正直なところ、まだ複雑ですが、ずっと簡単です。 – Asoub

関連する問題