1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 244749 We didn't display the proper process name after a local

attach.  This change fixes this by storing the process id of the inferior after the
attach is completed.
This commit is contained in:
Marc Khouzam 2008-08-20 20:26:39 +00:00
parent 0ea73d63b0
commit 5799b5a2a0
2 changed files with 48 additions and 3 deletions

View file

@ -25,10 +25,12 @@ import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.datamodel.DMContexts; import org.eclipse.dd.dsf.datamodel.DMContexts;
import org.eclipse.dd.dsf.datamodel.IDMContext; import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.debug.service.IProcesses; import org.eclipse.dd.dsf.debug.service.IProcesses;
import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerDMContext;
import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.gdb.internal.GdbPlugin; import org.eclipse.dd.gdb.internal.GdbPlugin;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl.SessionType; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl.SessionType;
import org.eclipse.dd.mi.service.IMIExecutionGroupDMContext;
import org.eclipse.dd.mi.service.IMIProcessDMContext; import org.eclipse.dd.mi.service.IMIProcessDMContext;
import org.eclipse.dd.mi.service.IMIProcesses; import org.eclipse.dd.mi.service.IMIProcesses;
import org.eclipse.dd.mi.service.MIProcesses; import org.eclipse.dd.mi.service.MIProcesses;
@ -125,13 +127,19 @@ public class GDBProcesses extends MIProcesses {
} }
@Override @Override
public void attachDebuggerToProcess(IProcessDMContext procCtx, final DataRequestMonitor<IDMContext> rm) { public void attachDebuggerToProcess(final IProcessDMContext procCtx, final DataRequestMonitor<IDMContext> rm) {
super.attachDebuggerToProcess( super.attachDebuggerToProcess(
procCtx, procCtx,
new DataRequestMonitor<IDMContext>(getExecutor(), rm) { new DataRequestMonitor<IDMContext>(getExecutor(), rm) {
@Override @Override
protected void handleSuccess() { protected void handleSuccess() {
fGdb.setConnected(true); fGdb.setConnected(true);
MIInferiorProcess inferiorProcess = fGdb.getInferiorProcess();
if (inferiorProcess != null) {
inferiorProcess.setPid(((IMIProcessDMContext)procCtx).getProcId());
}
rm.setData(getData()); rm.setData(getData());
rm.done(); rm.done();
} }
@ -152,6 +160,12 @@ public class GDBProcesses extends MIProcesses {
@Override @Override
protected void handleSuccess() { protected void handleSuccess() {
fGdb.setConnected(false); fGdb.setConnected(false);
MIInferiorProcess inferiorProcess = fGdb.getInferiorProcess();
if (inferiorProcess != null) {
inferiorProcess.setPid(null);
}
rm.done(); rm.done();
} }
}); });
@ -163,7 +177,20 @@ public class GDBProcesses extends MIProcesses {
if (fGdb.isConnected() && if (fGdb.isConnected() &&
inferiorProcess != null && inferiorProcess != null &&
inferiorProcess.getState() != MIInferiorProcess.State.TERMINATED) { inferiorProcess.getState() != MIInferiorProcess.State.TERMINATED) {
super.getProcessesBeingDebugged(dmc, rm);
final IMIExecutionGroupDMContext groupDmc = DMContexts.getAncestorOfType(dmc, IMIExecutionGroupDMContext.class);
if (groupDmc == null) {
// This service version only handles a single process to debug, therefore, we can simply
// create the context describing this process ourselves.
MIControlDMContext controlDmc = DMContexts.getAncestorOfType(dmc, MIControlDMContext.class);
IProcessDMContext procDmc = createProcessContext(controlDmc, inferiorProcess.getPid());
IMIExecutionGroupDMContext newGroupDmc = createExecutionGroupContext(procDmc, inferiorProcess.getPid());
rm.setData(new IContainerDMContext[] {newGroupDmc});
rm.done();
} else {
// List of threads
super.getProcessesBeingDebugged(dmc, rm);
}
} else { } else {
rm.setData(new IDMContext[0]); rm.setData(new IDMContext[0]);
rm.done(); rm.done();
@ -234,4 +261,14 @@ public class GDBProcesses extends MIProcesses {
rm.done(); rm.done();
} }
} }
@Override
public String getExecutionGroupIdFromThread(String threadId) {
MIInferiorProcess inferiorProcess = fGdb.getInferiorProcess();
if (inferiorProcess != null) {
return inferiorProcess.getPid();
}
return null;
}
} }

View file

@ -129,7 +129,7 @@ public class MIInferiorProcess extends Process
private State fState = State.RUNNING; private State fState = State.RUNNING;
int inferiorPID; private String fInferiorPid = null;
/** /**
* Creates an inferior process object which uses the given output stream * Creates an inferior process object which uses the given output stream
@ -423,6 +423,14 @@ public class MIInferiorProcess extends Process
return fPty; return fPty;
} }
public String getPid() {
return fInferiorPid;
}
public void setPid(String pid) {
fInferiorPid = pid;
}
public void eventReceived(Object output) { public void eventReceived(Object output) {
for (MIOOBRecord oobr : ((MIOutput)output).getMIOOBRecords()) { for (MIOOBRecord oobr : ((MIOutput)output).getMIOOBRecords()) {
if (oobr instanceof MIExecAsyncOutput) { if (oobr instanceof MIExecAsyncOutput) {