mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-21 21:52:10 +02:00
Bug 580259: Not all remote session have a connected process
Contributed by STMicroelectronics Change-Id: Idec88f4bf0cbc8326bf19b9f081af9f9f9d437e2 Signed-off-by: Torbjörn Svensson <torbjorn.svensson@st.com>
This commit is contained in:
parent
2481f398e0
commit
96839a029d
2 changed files with 62 additions and 62 deletions
|
@ -660,14 +660,19 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
|||
@Execute
|
||||
public void stepAttachRemoteToDebugger(final RequestMonitor requestMonitor) {
|
||||
if (fGDBBackend.getIsAttachSession() && fGDBBackend.getSessionType() == SessionType.REMOTE) {
|
||||
DataRequestMonitor<Boolean> rm = new DataRequestMonitor<>(getExecutor(), null);
|
||||
fProcService.canDetachDebuggerFromProcess(null, rm);
|
||||
|
||||
if (rm.getData()) {
|
||||
IProcessDMContext processContext = fProcService.createProcessContext(fCommandControl.getContext(),
|
||||
MIProcesses.UNKNOWN_PROCESS_ID);
|
||||
fProcService.attachDebuggerToProcess(processContext,
|
||||
new DataRequestMonitor<IDMContext>(getExecutor(), requestMonitor));
|
||||
} else {
|
||||
requestMonitor.done();
|
||||
return;
|
||||
}
|
||||
}
|
||||
requestMonitor.done();
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that the Data Model has been filled. This will trigger the Debug view to expand.
|
||||
|
|
|
@ -285,19 +285,13 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 implements IMultiTerminat
|
|||
// NOTE: when we support multi-process in all-stop mode,
|
||||
// we will need to interrupt the target to when doing the attach.
|
||||
int numConnected = getNumConnected();
|
||||
switch (sessionType) {
|
||||
case REMOTE:
|
||||
// In remote session already one process is connected
|
||||
// Bug 528145
|
||||
return numConnected == 1;
|
||||
case LOCAL:
|
||||
return numConnected == 0;
|
||||
|
||||
default:
|
||||
break;
|
||||
if (numConnected == 1 && sessionType == SessionType.REMOTE) {
|
||||
// Bug 528145: Special case for remote sessions with an existing connection.
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return numConnected == 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -333,11 +327,13 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 implements IMultiTerminat
|
|||
public void execute(final RequestMonitor rm) {
|
||||
// The remote session is already connected to the process
|
||||
// Bug 528145
|
||||
if (fBackend.getSessionType() == SessionType.REMOTE) {
|
||||
if (fBackend.getSessionType() == SessionType.REMOTE
|
||||
&& doCanDetachDebuggerFromProcess()) {
|
||||
rm.done();
|
||||
} else {
|
||||
getProcessesBeingDebugged(procCtx,
|
||||
new ImmediateDataRequestMonitor<IDMContext[]>(rm) {
|
||||
return;
|
||||
}
|
||||
|
||||
getProcessesBeingDebugged(procCtx, new ImmediateDataRequestMonitor<IDMContext[]>(rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
assert getData() != null;
|
||||
|
@ -352,10 +348,9 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 implements IMultiTerminat
|
|||
}
|
||||
if (found) {
|
||||
// abort the sequence
|
||||
Status failedStatus = new Status(IStatus.ERROR,
|
||||
GdbPlugin.PLUGIN_ID, REQUEST_FAILED,
|
||||
MessageFormat.format(
|
||||
Messages.Already_connected_process_err,
|
||||
Status failedStatus = new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID,
|
||||
REQUEST_FAILED,
|
||||
MessageFormat.format(Messages.Already_connected_process_err,
|
||||
((IMIProcessDMContext) procCtx).getProcId()),
|
||||
null);
|
||||
rm.done(failedStatus);
|
||||
|
@ -365,7 +360,6 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 implements IMultiTerminat
|
|||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// If this is not the very first inferior, we first need create the new inferior
|
||||
|
@ -477,9 +471,12 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 implements IMultiTerminat
|
|||
public void execute(RequestMonitor rm) {
|
||||
// This call end the current attach to the gdbserver in remote session
|
||||
// Bug 528145
|
||||
if (fBackend.getSessionType() == SessionType.REMOTE) {
|
||||
if (fBackend.getSessionType() == SessionType.REMOTE
|
||||
&& doCanDetachDebuggerFromProcess()) {
|
||||
rm.done();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
// For non-stop mode, we do a non-interrupting attach
|
||||
// Bug 333284
|
||||
boolean shouldInterrupt = true;
|
||||
|
@ -489,13 +486,11 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 implements IMultiTerminat
|
|||
}
|
||||
|
||||
boolean extraNewline = targetAttachRequiresTrailingNewline();
|
||||
ICommand<MIInfo> miTargetAttach = fCommandFactory.createMITargetAttach(
|
||||
fContainerDmc, ((IMIProcessDMContext) procCtx).getProcId(), shouldInterrupt,
|
||||
extraNewline);
|
||||
ICommand<MIInfo> miTargetAttach = fCommandFactory.createMITargetAttach(fContainerDmc,
|
||||
((IMIProcessDMContext) procCtx).getProcId(), shouldInterrupt, extraNewline);
|
||||
fCommandControl.queueCommand(miTargetAttach,
|
||||
new ImmediateDataRequestMonitor<MIInfo>(rm));
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
// Initialize memory data for this process.
|
||||
|
|
Loading…
Add table
Reference in a new issue