Prev / Next / たまにっき。

AddTracer

Category: [Java][開発]
2005-09-29

少し JVMTI を触ってみた.AddTracer では今まで tracer 埋め込み処理が必要だった.それをクラスロード時に動的に埋め込めるようにした.すなわち,今までは静的にしか AddTracer を起動することができなかったが,本来動かしたいアプリケーションを実行するときに同時に AddTracer を起動させることが可能になった.
ただ,コンパイルが環境によっても変わってくるし,JDK 5.0 以降しか使えないので,まだ未公開.

以下の手順で実行している.
1. JVM 初期化時に AddTracer がロードできるようクラスパスを追加.
2. JVM 初期化終了後,AddTracer をロードし,new する.
3. クラスロードフックを設定.これでクラスがロードされる直前でバイトコードに対し,処理を行うことができる.
4. クラスロード直前のバイトコードに対して AddTracer を適用.
5. 以下のような実行だけで OK.事前に tracer を埋め込む必要もなくなった.

$ javac HelloWorld.java
$ java -agentlib:addtracer HelloWorld
<!-- begin Method HelloWorld#main       // line 3 defined in - -->
args[0-0]       *       assignment      // line 3
args.length     0       assingment      // line 3
java.lang.System#out<s> java.io.PrintStream@1a786c3     reference       // line 3
Hello World!
<!-- end Method HelloWorld#main // - ending at line 4 -->



うーん,便利だ,JVMTI.

Category: [Java][開発]