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;
}
}