diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java index e6a25c432ca..6eb8181236e 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java @@ -729,14 +729,27 @@ public class GDBProcesses_7_0 extends AbstractDsfService } }); } else { - IMIContainerDMContext[] containerDmcs = new IMIContainerDMContext[fDebuggedProcessesAndNames.size()]; - int i = 0; - for (String groupId : fDebuggedProcessesAndNames.keySet()) { - IProcessDMContext processDmc = createProcessContext(controlDmc, groupId); - containerDmcs[i++] = createContainerContext(processDmc, groupId); - } - rm.setData(containerDmcs); - rm.done(); + fContainerCommandCache.execute( + fCommandFactory.createMIListThreadGroups(controlDmc), + new DataRequestMonitor(getExecutor(), rm) { + @Override + protected void handleSuccess() { + rm.setData(makeContainerDMCs(controlDmc, getData().getGroupList())); + rm.done(); + } + @Override + protected void handleFailure() { + // If the target is not available, generate the list ourselves + IMIContainerDMContext[] containerDmcs = new IMIContainerDMContext[fDebuggedProcessesAndNames.size()]; + int i = 0; + for (String groupId : fDebuggedProcessesAndNames.keySet()) { + IProcessDMContext processDmc = createProcessContext(controlDmc, groupId); + containerDmcs[i++] = createContainerContext(processDmc, groupId); + } + rm.setData(containerDmcs); + rm.done(); + } + }); } } @@ -763,6 +776,16 @@ public class GDBProcesses_7_0 extends AbstractDsfService } } + private IMIContainerDMContext[] makeContainerDMCs(ICommandControlDMContext controlDmc, IThreadGroupInfo[] groups) { + IMIContainerDMContext[] containerDmcs = new IMIContainerDMContext[groups.length]; + for (int i = 0; i < groups.length; i++) { + String groupId = groups[i].getGroupId(); + IProcessDMContext procDmc = createProcessContext(controlDmc, groupId); + containerDmcs[i] = createContainerContext(procDmc, groupId); + } + return containerDmcs; + } + public void getRunningProcesses(IDMContext dmc, final DataRequestMonitor rm) { final ICommandControlDMContext controlDmc = DMContexts.getAncestorOfType(dmc, ICommandControlDMContext.class);