Package st.gravel.support.jvm.debugger

Source Code of st.gravel.support.jvm.debugger.VMAcquirer

package st.gravel.support.jvm.debugger;

import java.io.IOException;
import java.util.Map;

import com.sun.jdi.Bootstrap;
import com.sun.jdi.VirtualMachine;
import com.sun.jdi.VirtualMachineManager;
import com.sun.jdi.connect.AttachingConnector;
import com.sun.jdi.connect.IllegalConnectorArgumentsException;

// From: http://illegalargumentexception.blogspot.nl/2009/03/java-using-jpda-to-write-debugger.html

public class VMAcquirer {

    /**
     * Call this with the localhost port to connect to.
     */
    public VirtualMachine connect(int port)
        throws IOException {
      String strPort = Integer.toString(port);
      AttachingConnector connector = getConnector();
      try {
        VirtualMachine vm = connect(connector, strPort);
        return vm;
      } catch (IllegalConnectorArgumentsException e) {
        throw new IllegalStateException(e);
      }
    }

    private AttachingConnector getConnector() {
      VirtualMachineManager vmManager = Bootstrap
          .virtualMachineManager();
      for (AttachingConnector connector : vmManager
          .attachingConnectors()) {
        if ("com.sun.jdi.SocketAttach".equals(connector
            .name())) {
          return (AttachingConnector) connector;
        }
      }
      throw new IllegalStateException();
    }

    private VirtualMachine connect(
        AttachingConnector connector, String port)
        throws IllegalConnectorArgumentsException,
        IOException {
      Map<String, AttachingConnector.Argument> args = connector
          .defaultArguments();
      AttachingConnector.Argument pidArgument = args.get("port");
      if (pidArgument == null) {
        throw new IllegalStateException();
      }
      pidArgument.setValue(port);

      return connector.attach(args);
    }

  }
TOP

Related Classes of st.gravel.support.jvm.debugger.VMAcquirer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.