JDI入門 その1

あー、プログラムネタを思いついた。
JDIの日本語で解説してるHPとかないから、それを書こう。
うん、需要はなさそうだが。


以下超マニアックゆえ、お好きな方だけどうぞ・・・。(笑


入門その1


まずは、JDIって何?からか。
JDIとは、JavaDebugInterfaceの略ですな。
ほらほら、Eclipseとか使ってる人にはおなじみ、ブレークポイント設定したり、
変数の中身がりがり読んだり、そういうのやるためのAPI


まー、多分あんまり必要としてる人はいないと思うけど(笑。
たまにはマニアックな内容を書こうと。


んで。まずは、VirtualMachineを起動できないとね。
最初の1歩。まず、jarにPath通さないとね。
JDK 5.0だとJDKをインストールしたときに、一緒についてくるlib\tools.jarにPathをとーしましょう。


さて。まずは、サンプルコード。

public class JdiTest {

  public static void main(String[] args)
    throws IOException, IllegalConnectorArgumentsException, VMStartException
  {
    LaunchingConnector connector = Bootstrap.virtualMachineManager().defaultConnector();

    Map arguments = setupArguments(connector);
    VirtualMachine vm = connector.launch(arguments);
    vm.resume();
  }

  private static Map setupArguments(Connector c) {
    Map map = c.defaultArguments();
		
    Connector.Argument argument = map.get("main");
    argument.setValue("HelloWorld");
	
    return map;
  }
}

import文は省略。
まー、プログラムの解説から。
至極単純。HelloWorldっていうクラスを動かす。それだけ。
ただし、標準IOのリダイレクトとかやってないので、表示とかしないけどね。


んーで、上の行から解説。
まず、メイン関数。
JVMはまず、コネクトを張ります。いろいろ方法はある(らしい)けど、とりあえず楽なのは、最初の1行。これでコネクトを張るオブジェクトが取ってこれる。
次は、VMの引数を指定する。これ、とりあえずメソッド化で、後回し。
最後は、VMのオブジェクトを生成して、VM.resume()しましょう。これで、起動。


んで、メソッド化した分。
defaultの引数をとってきて、"main"にHelloWorldを指定する。


まー、こんなもんだね。
次はなんにしようかねぇ。