Javaスタックトレースに情報を追加する方法はありますか?Javaスタックトレースにユーザー指定の情報を追加
私はスクリプト言語用のインタープリタを開発しており、Javaのstacktraceにスクリプトコードの対応する行を表示したいと考えています。
java.lang.NullPointerException
at package.IPF_Try.execute(IPF_Try.java:76) called in script.scr:155
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_If.execute(IPF_If.java:105) called in script.scr:130
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_Main.execute(IPF_Main.java:147)
...
またはこの:出力は次のようなものになります
java.lang.NullPointerException
at package.IPF_Try.execute(IPF_Try.java:76)
--- called in script.scr:155 ---
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_If.execute(IPF_If.java:105)
--- called in script.scr:130---
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_Main.execute(IPF_Main.java:147)
...
これは、簡単にたくさんのデバッグなるだろうが、残念ながらGoogleはこれを達成するために何かを見つけることができませんでした。
私が考えることができる唯一の方法は、名前が必要な情報を含み、単にスタックトレースの次のメソッドを呼び出すメソッドで多くのクラスを動的に生成することでした - しかし、それは(permgen)メモリとCPUのサイクルは私に。
興味深い質問です。 Javaコンパイラはファイル名と行番号を持つデバッグシンボルをバイトコードに入れます。私はあなたがバイトコードを使いこなせば、あなたのニーズに合わせてそれを微調整することができると思います。 JSPコンパイラはそういうことをしていますか? – Thilo
@Thilo - はい - JSPはバイトコードにコンパイルされます(中間のJavaフォームを使用することもあります)。あなたは通常、サーバーの "作業中の"ディレクトリを突き抜けて、コンパイルされたクラスを見つけることができます。 – McDowell
問題は、さまざまなスクリプトから呼び出されるため、私のメソッドのバイトコードを単純に混乱させることができないため、特定の情報を追加することができないということです。 しかし、メソッド名などに必要な情報を含むクラスを動的に作成することはできますが、パフォーマンスの影響が懸念されます。 – ChristophK