谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

BTraceのClientを叩いてみた。

前回まででBTraceのCompilerを直接叩くことは試したので、
今回は、それで出来あがったクラス(バイト配列)を使って
実際にアプリケーションにアタッチしてみる。


利用するのは、com.sun.btrace.client.Clientクラス。

Client client = new Client(port);
client.attach(pid);
client.submit(clazz, new String[0],
	new CommandListener() {
		@Override
		public void onCommand(Command command) throws IOException {
			System.out.println(command);
		}
	});

portはポート番号(空いてるポートなら何でもいい)で、
pidはアタッチしたい対象のPID、
clazzはBTraceでコンパイルしたクラスのバイト配列である。


これで、イベントが発生するたびにonCommandメソッドが呼ばれる。
接続に成功するとcom.sun.btrace.comm.OkayCommandのインスタンスが渡されるし
メッセージ出力(BTraceUtils#printlnメソッドの呼び出し)が行われると
com.sun.btrace.comm.MessageCommandのインスタンスが渡ってくる、という要領。


「BTraceってコンソールに出力するだけじゃないか、くわっ!」っていう向きの人は
こうやって自前でClientを叩いてみればいい。


こんな感じで、BTraceを思い通りに操作できるようになった。
次は、BTraceを使って出力したログを、可視化するツールの作成だ。
平たく言えば、ArrowVisionを自前で作ろう、ってこと。


JGraphあたりを使おうと思う。