code: package org.gridkit.jvmtool.bstub;
  
  import java.io.IOException;
  import java.util.Random;
  
  import org.gridkit.jvmtool.cli.CommandLauncher;
  
  import com.beust.jcommander.Parameter;
  
  import net.java.btrace.client.Client;
  
  public class BTraceClientConnection {
  
      private CommandLauncher host;
      
      @Parameter(names = "-p", description = "PID of target process", required = true)
      private int pid = -1;
      
      @Parameter(names = "--bt-debug", description = "Enabled BTrace debug mode", required = false)
      private boolean btraceDebug = false;
      
      public BTraceClientConnection(CommandLauncher host) {
          this.host = host;
      }
  
      public int getPID() {
          return pid;
      }
      
      public Client connect() throws IOException {
  
          Client client = Client.forPID(pid);
          if (client == null) {
              host.fail("Failed to connected to " + pid);
          }
  
          client.setDebug(btraceDebug);
          client.setUnsafe(true);
          client.setPort(50000 + new Random(System.currentTimeMillis()).nextInt(5000));
          client.setAgentPath(AgentHelper.initAgentJar());
          
          //TODO should add tools.jar of target VM
          client.setSysCp(client.getSysCp());
  
          client.attach();
          
          return client;
      }
  }
  