Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 180122 Details for
Bug 317500
[processes] The id reported by -list-thread-groups has changed in GDB 7.2
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Fix for HEAD
zpatch.7.2pid2.txt (text/plain), 28.02 KB, created by
Marc Khouzam
on 2010-10-03 21:58:05 EDT
(
hide
)
Description:
Fix for HEAD
Filename:
MIME Type:
Creator:
Marc Khouzam
Created:
2010-10-03 21:58:05 EDT
Size:
28.02 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.cdt.dsf.gdb >Index: src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java,v >retrieving revision 1.7 >diff -u -r1.7 GDBProcesses.java >--- src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java 20 May 2010 19:32:28 -0000 1.7 >+++ src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java 4 Oct 2010 01:33:28 -0000 >@@ -92,8 +92,7 @@ > new Hashtable<String, String>()); > > ICommandControlService commandControl = getServicesTracker().getService(ICommandControlService.class); >- IProcessDMContext procDmc = createProcessContext(commandControl.getContext(), MIProcesses.UNIQUE_GROUP_ID); >- IContainerDMContext containerDmc = createContainerContext(procDmc, MIProcesses.UNIQUE_GROUP_ID); >+ IContainerDMContext containerDmc = createContainerContextFromGroupId(commandControl.getContext(), MIProcesses.UNIQUE_GROUP_ID); > fGdb.getInferiorProcess().setContainerContext(containerDmc); > > getSession().addServiceEventListener(this, null); >Index: src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java,v >retrieving revision 1.26 >diff -u -r1.26 GDBProcesses_7_0.java >--- src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java 20 Aug 2010 18:01:44 -0000 1.26 >+++ src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java 4 Oct 2010 01:33:28 -0000 >@@ -392,6 +392,10 @@ > * A map of thread id to thread group id. We use this to find out to which threadGroup a thread belongs. > */ > private Map<String, String> fThreadToGroupMap = new HashMap<String, String>(); >+ /** >+ * A map of thread group id to process id. We use this to find out to which pid a group refers. >+ */ >+ private Map<String, String> fGroupToPidMap = new HashMap<String, String>(); > > private IGDBControl fCommandControl; > private IGDBBackend fBackend; >@@ -549,10 +553,20 @@ > } > } > } >- IProcessDMContext processDmc = createProcessContext(controlDmc, groupId); >- return createContainerContext(processDmc, groupId); >+ >+ return createContainerContextFromGroupId(controlDmc, groupId); > } > >+ /** @since 4.0 */ >+ public IMIContainerDMContext createContainerContextFromGroupId(ICommandControlDMContext controlDmc, String groupId) { >+ String pid = fGroupToPidMap.get(groupId); >+ if (pid == null) { >+ pid = groupId; >+ } >+ IProcessDMContext processDmc = createProcessContext(controlDmc, pid); >+ return createContainerContext(processDmc, groupId); >+ } >+ > public IMIExecutionDMContext[] getExecutionContexts(IMIContainerDMContext containerDmc) { > String groupId = containerDmc.getGroupId(); > List<IMIExecutionDMContext> execDmcList = new ArrayList<IMIExecutionDMContext>(); >@@ -765,11 +779,10 @@ > @Override > protected void handleFailure() { > // If the target is not available, generate the list ourselves >- IMIContainerDMContext[] containerDmcs = new IMIContainerDMContext[fDebuggedProcessesAndNames.size()]; >+ IMIContainerDMContext[] containerDmcs = new IMIContainerDMContext[fGroupToPidMap.size()]; > int i = 0; >- for (String groupId : fDebuggedProcessesAndNames.keySet()) { >- IProcessDMContext processDmc = createProcessContext(controlDmc, groupId); >- containerDmcs[i++] = createContainerContext(processDmc, groupId); >+ for (String groupId : fGroupToPidMap.keySet()) { >+ containerDmcs[i++] = createContainerContextFromGroupId(controlDmc, groupId); > } > rm.setData(containerDmcs); > rm.done(); >@@ -808,9 +821,7 @@ > // code can be removed when GDB 7.2 is released > // START OF WORKAROUND > if (groups.length == 0 && fBackend.getSessionType() == SessionType.CORE) { >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- IProcessDMContext processDmc = createProcessContext(controlDmc, groupId); >- return new IMIContainerDMContext[] {createContainerContext(processDmc, groupId)}; >+ return new IMIContainerDMContext[] {createContainerContextFromGroupId(controlDmc, MIProcesses.UNIQUE_GROUP_ID)}; > } > // END OF WORKAROUND to be removed when GDB 7.2 is available > >@@ -828,8 +839,7 @@ > continue; > } > String groupId = group.getGroupId(); >- IProcessDMContext procDmc = createProcessContext(controlDmc, groupId); >- containerDmcs.add(createContainerContext(procDmc, groupId)); >+ containerDmcs.add(createContainerContextFromGroupId(controlDmc, groupId)); > } > return containerDmcs.toArray(new IMIContainerDMContext[containerDmcs.size()]); > } >@@ -1049,6 +1059,7 @@ > "thread-group-exited".equals(miEvent)) { //$NON-NLS-1$ > > String groupId = null; >+ String pId = null; > > MIResult[] results = exec.getMIResults(); > for (int i = 0; i < results.length; i++) { >@@ -1058,19 +1069,32 @@ > if (val instanceof MIConst) { > groupId = ((MIConst) val).getString().trim(); > } >+ } else if (var.equals("pid")) { //$NON-NLS-1$ >+ // Available starting with GDB 7.2 >+ if (val instanceof MIConst) { >+ pId = ((MIConst) val).getString().trim(); >+ } > } > } > >+ if (pId == null) { >+ // Before GDB 7.2, the groupId was the pid of the process >+ pId = groupId; >+ } >+ > if (groupId != null) { > if ("thread-group-created".equals(miEvent) || "thread-group-started".equals(miEvent)) { //$NON-NLS-1$ //$NON-NLS-2$ >- fDebuggedProcessesAndNames.put(groupId, ""); //$NON-NLS-1$ >+ >+ fGroupToPidMap.put(groupId, pId); >+ >+ fDebuggedProcessesAndNames.put(pId, ""); //$NON-NLS-1$ > > // GDB is debugging a new process. Let's fetch its > // name and remember it. In order to get the name, > // we have to request all running processes, not > // just the ones being debugged. We got a lot more > // information when we request all processes. >- final String finalGroupId = groupId; >+ final String finalPId = pId; > fListThreadGroupsAvailableCache.execute( > fCommandFactory.createMIListThreadGroups(fCommandControl.getContext(), true), > new DataRequestMonitor<MIListThreadGroupsInfo>(getExecutor(), null) { >@@ -1081,10 +1105,12 @@ > // sending of this command. > fListThreadGroupsAvailableCache.reset(); > >+ // Note that the output of the "-list-thread-groups --available" command >+ // still shows the pid as a groupId, even for GDB 7.2. > if (isSuccess()) { > for (IThreadGroupInfo groupInfo : getData().getGroupList()) { >- if (groupInfo.getPid().equals(finalGroupId)) { >- fDebuggedProcessesAndNames.put(finalGroupId, groupInfo.getName()); >+ if (groupInfo.getPid().equals(finalPId)) { >+ fDebuggedProcessesAndNames.put(finalPId, groupInfo.getName()); > } > } > } >@@ -1097,10 +1123,11 @@ > IProcessList list = null; > try { > list = CCorePlugin.getDefault().getProcessList(); >- int groupId_int = Integer.parseInt(finalGroupId); >+ int pId_int = Integer.parseInt(finalPId); > for (IProcessInfo procInfo : list.getProcessList()) { >- if (procInfo.getPid() == groupId_int) { >- fDebuggedProcessesAndNames.put(finalGroupId, procInfo.getName()); >+ if (procInfo.getPid() == pId_int) { >+ fDebuggedProcessesAndNames.put(finalPId, procInfo.getName()); >+ break; > } > } > } catch (CoreException e) { >@@ -1110,8 +1137,11 @@ > } > }); > } else if ("thread-group-exited".equals(miEvent)) { //$NON-NLS-1$ >+ >+ fGroupToPidMap.remove(groupId); >+ > // GDB is no longer debugging this process. Remove it from our list. >- fDebuggedProcessesAndNames.remove(groupId); >+ fDebuggedProcessesAndNames.remove(pId); > > // Remove any entries for that group from our thread to group map > // When detaching from a group, we won't have received any thread-exited event >Index: src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java,v >retrieving revision 1.18 >diff -u -r1.18 GDBControl.java >--- src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java 27 Aug 2010 14:01:11 -0000 1.18 >+++ src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java 4 Oct 2010 01:33:29 -0000 >@@ -18,8 +18,8 @@ > import java.util.ArrayList; > import java.util.Hashtable; > import java.util.List; >-import java.util.Properties; > import java.util.Map.Entry; >+import java.util.Properties; > import java.util.concurrent.Future; > import java.util.concurrent.TimeUnit; > >@@ -32,7 +32,6 @@ > import org.eclipse.cdt.dsf.concurrent.RequestMonitor; > import org.eclipse.cdt.dsf.concurrent.Sequence; > import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent; >-import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext; > import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext; > import org.eclipse.cdt.dsf.debug.service.command.ICommand; > import org.eclipse.cdt.dsf.debug.service.command.ICommandControl; >@@ -43,10 +42,10 @@ > import org.eclipse.cdt.dsf.gdb.service.IGDBBackend; > import org.eclipse.cdt.dsf.gdb.service.SessionType; > import org.eclipse.cdt.dsf.mi.service.IMIBackend; >+import org.eclipse.cdt.dsf.mi.service.IMIBackend.BackendStateChangedEvent; > import org.eclipse.cdt.dsf.mi.service.IMICommandControl; > import org.eclipse.cdt.dsf.mi.service.IMIProcesses; > import org.eclipse.cdt.dsf.mi.service.MIProcesses; >-import org.eclipse.cdt.dsf.mi.service.IMIBackend.BackendStateChangedEvent; > import org.eclipse.cdt.dsf.mi.service.MIProcesses.ContainerExitedDMEvent; > import org.eclipse.cdt.dsf.mi.service.MIProcesses.ContainerStartedDMEvent; > import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess; >@@ -55,8 +54,8 @@ > import org.eclipse.cdt.dsf.mi.service.command.CommandFactory; > import org.eclipse.cdt.dsf.mi.service.command.MIControlDMContext; > import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess; >-import org.eclipse.cdt.dsf.mi.service.command.MIRunControlEventProcessor; > import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess.State; >+import org.eclipse.cdt.dsf.mi.service.command.MIRunControlEventProcessor; > import org.eclipse.cdt.dsf.mi.service.command.output.MIBreakInsertInfo; > import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo; > import org.eclipse.cdt.dsf.service.DsfServiceEventHandler; >@@ -319,8 +318,7 @@ > DsfServicesTracker servicesTracker = new DsfServicesTracker(GdbPlugin.getBundleContext(), getSession().getId()); > IMIProcesses procService = servicesTracker.getService(IMIProcesses.class); > servicesTracker.dispose(); >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); >- final IContainerDMContext containerDmc = procService.createContainerContext(procDmc, MIProcesses.UNIQUE_GROUP_ID); >+ final IContainerDMContext containerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > > final ICommand<MIInfo> execCommand; > if (useContinueCommand(launch, restart)) { >Index: src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java,v >retrieving revision 1.22 >diff -u -r1.22 GDBControl_7_0.java >--- src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java 27 Aug 2010 14:01:11 -0000 1.22 >+++ src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java 4 Oct 2010 01:33:29 -0000 >@@ -32,7 +32,6 @@ > import org.eclipse.cdt.dsf.concurrent.RequestMonitor; > import org.eclipse.cdt.dsf.concurrent.Sequence; > import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent; >-import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext; > import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext; > import org.eclipse.cdt.dsf.debug.service.command.ICommand; > import org.eclipse.cdt.dsf.debug.service.command.ICommandControl; >@@ -449,8 +448,7 @@ > @Override > public void execute(RequestMonitor rm) { > IMIProcesses procService = getServicesTracker().getService(IMIProcesses.class); >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); >- fContainerDmc = procService.createContainerContext(procDmc, MIProcesses.UNIQUE_GROUP_ID); >+ fContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > ICommand<MIInfo> command; > > if (useContinueCommand(launch, restart)) { >Index: src/org/eclipse/cdt/dsf/mi/service/IMIProcesses.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/IMIProcesses.java,v >retrieving revision 1.2 >diff -u -r1.2 IMIProcesses.java >--- src/org/eclipse/cdt/dsf/mi/service/IMIProcesses.java 3 Jun 2010 00:09:36 -0000 1.2 >+++ src/org/eclipse/cdt/dsf/mi/service/IMIProcesses.java 4 Oct 2010 01:33:29 -0000 >@@ -57,11 +57,23 @@ > > /** > * Create a container context based on a threadId. This implies knowledge >- * of which threads belong to which container. >+ * of which threads belong to which container. This method can only be used >+ * if the threadId has been already created. > * > * @param controlDmc The parent command control context of this context > * @param threadId The thread id belonging to the container we want to create > */ > IMIContainerDMContext createContainerContextFromThreadId(ICommandControlDMContext controlDmc, String threadId); >+ >+ /** >+ * Create a container context based on a groupId. This implies knowledge >+ * of which pid is represented by the groupId. This method can only be used >+ * if the groupId has been already created. >+ * >+ * @param controlDmc The parent command control context of this context >+ * @param goupId The thread-group id of the container we want to create >+ * @since 4.0 >+ */ >+ IMIContainerDMContext createContainerContextFromGroupId(ICommandControlDMContext controlDmc, String groupId); > } > >Index: src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java,v >retrieving revision 1.8 >diff -u -r1.8 MIProcesses.java >--- src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java 3 Jun 2010 00:09:36 -0000 1.8 >+++ src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java 4 Oct 2010 01:33:29 -0000 >@@ -413,11 +413,16 @@ > } > > public IMIContainerDMContext createContainerContextFromThreadId(ICommandControlDMContext controlDmc, String threadId) { >- String groupId = UNIQUE_GROUP_ID; >+ return createContainerContextFromGroupId(controlDmc, UNIQUE_GROUP_ID); >+ } >+ >+ /** @since 4.0 */ >+ public IMIContainerDMContext createContainerContextFromGroupId(ICommandControlDMContext controlDmc, String groupId) { > IProcessDMContext processDmc = createProcessContext(controlDmc, groupId); > return createContainerContext(processDmc, groupId); > } > >+ > public void getExecutionData(IThreadDMContext dmc, final DataRequestMonitor<IThreadDMData> rm) { > if (dmc instanceof MIProcessDMC) { > rm.setData(new MIThreadDMData("", ((MIProcessDMC)dmc).getProcId())); //$NON-NLS-1$ >@@ -568,9 +573,7 @@ > // This service version only handles a single process to debug, therefore, we can simply > // create the context describing this process ourselves. > ICommandControlDMContext controlDmc = DMContexts.getAncestorOfType(dmc, ICommandControlDMContext.class); >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- IProcessDMContext procDmc = createProcessContext(controlDmc, groupId); >- IMIContainerDMContext newContainerDmc = createContainerContext(procDmc, groupId); >+ IMIContainerDMContext newContainerDmc = createContainerContextFromGroupId(controlDmc, UNIQUE_GROUP_ID); > rm.setData(new IContainerDMContext[] {newContainerDmc}); > rm.done(); > } >Index: src/org/eclipse/cdt/dsf/mi/service/command/CLIEventProcessor.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CLIEventProcessor.java,v >retrieving revision 1.7 >diff -u -r1.7 CLIEventProcessor.java >--- src/org/eclipse/cdt/dsf/mi/service/command/CLIEventProcessor.java 30 Jul 2010 15:51:42 -0000 1.7 >+++ src/org/eclipse/cdt/dsf/mi/service/command/CLIEventProcessor.java 4 Oct 2010 01:33:29 -0000 >@@ -20,15 +20,14 @@ > import org.eclipse.cdt.dsf.datamodel.DMContexts; > import org.eclipse.cdt.dsf.datamodel.IDMContext; > import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContext; >-import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext; > import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext; > import org.eclipse.cdt.dsf.debug.service.ISignals.ISignalsDMContext; > import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService; >+import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; > import org.eclipse.cdt.dsf.debug.service.command.ICommandListener; > import org.eclipse.cdt.dsf.debug.service.command.ICommandResult; > import org.eclipse.cdt.dsf.debug.service.command.ICommandToken; > import org.eclipse.cdt.dsf.debug.service.command.IEventListener; >-import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; > import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin; > import org.eclipse.cdt.dsf.mi.service.IMIProcesses; > import org.eclipse.cdt.dsf.mi.service.MIProcesses; >@@ -124,10 +123,7 @@ > > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); > if (procService != null) { >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > MIEvent<?> e = new MIThreadCreatedEvent(processContainerDmc, threadId); > fCommandControl.getSession().dispatchEvent(e, fCommandControl.getProperties()); > } >@@ -167,10 +163,7 @@ > // if it was a step instruction set state running > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); > if (procService != null) { >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > MIEvent<?> event = new MIRunningEvent(processContainerDmc, token, type); > fCommandControl.getSession().dispatchEvent(event, fCommandControl.getProperties()); > } >Index: src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor.java,v >retrieving revision 1.12 >diff -u -r1.12 MIRunControlEventProcessor.java >--- src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor.java 15 Jul 2010 16:19:48 -0000 1.12 >+++ src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor.java 4 Oct 2010 01:33:30 -0000 >@@ -15,6 +15,7 @@ > import java.util.List; > > import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; >+import org.eclipse.cdt.dsf.datamodel.DMContexts; > import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext; > import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMContext; > import org.eclipse.cdt.dsf.debug.service.IRunControl; >@@ -192,9 +193,7 @@ > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); > if (runControl != null && procService != null) { > // We don't know which thread stopped so we simply create a container event. >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > > if (runControl.isSuspended(processContainerDmc) == false) { > // Create an MISignalEvent because that is what the *stopped event should have been >@@ -235,13 +234,11 @@ > return null; > } > >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > > IExecutionDMContext execDmc = processContainerDmc; > if (threadId != null) { >+ IProcessDMContext procDmc = DMContexts.getAncestorOfType(processContainerDmc, IProcessDMContext.class); > IThreadDMContext threadDmc = procService.createThreadContext(procDmc, threadId); > execDmc = procService.createExecutionContext(processContainerDmc, threadDmc, threadId); > } >@@ -318,9 +315,7 @@ > > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); > if (procService != null) { >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > > fCommandControl.getSession().dispatchEvent( > new MIRunningEvent(processContainerDmc, id, type), fCommandControl.getProperties()); >@@ -343,9 +338,7 @@ > if (backendService != null && backendService.getIsAttachSession() == false) { > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); > if (procService != null) { >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > > fCommandControl.getSession().dispatchEvent( > new ContainerStartedDMEvent(processContainerDmc), fCommandControl.getProperties()); >@@ -367,9 +360,7 @@ > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); > if (runControl != null && procService != null) { > // We don't know which thread stopped so we simply create a container event. >- String groupId = MIProcesses.UNIQUE_GROUP_ID; >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, MIProcesses.UNIQUE_GROUP_ID); > > // An attaching operation is debugging a new inferior and always stops it. > // We should not check that the container is suspended, because at startup, we are considered >Index: src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java,v >retrieving revision 1.11 >diff -u -r1.11 MIRunControlEventProcessor_7_0.java >--- src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java 17 Aug 2010 13:56:43 -0000 1.11 >+++ src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java 4 Oct 2010 01:33:30 -0000 >@@ -197,8 +197,7 @@ > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); > > if (procService != null) { >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >- IContainerDMContext processContainerDmc = procService.createContainerContext(procDmc, groupId); >+ IContainerDMContext processContainerDmc = procService.createContainerContextFromGroupId(fControlDmc, groupId); > > MIEvent<?> event = null; > if ("thread-created".equals(miEvent)) { //$NON-NLS-1$ >@@ -216,6 +215,7 @@ > "thread-group-exited".equals(miEvent)) { //$NON-NLS-1$ > > String groupId = null; >+ String pId = null; > > MIResult[] results = exec.getMIResults(); > for (int i = 0; i < results.length; i++) { >@@ -225,12 +225,22 @@ > if (val instanceof MIConst) { > groupId = ((MIConst) val).getString().trim(); > } >+ } else if (var.equals("pid")) { //$NON-NLS-1$ >+ // Available starting with GDB 7.2 >+ if (val instanceof MIConst) { >+ pId = ((MIConst) val).getString().trim(); >+ } > } > } >+ >+ if (pId == null) { >+ // Before GDB 7.2, the groupId was the pid of the process >+ pId = groupId; >+ } > > IMIProcesses procService = fServicesTracker.getService(IMIProcesses.class); >- if (groupId != null && procService != null) { >- IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, groupId); >+ if (pId != null && procService != null) { >+ IProcessDMContext procDmc = procService.createProcessContext(fControlDmc, pId); > > MIEvent<?> event = null; > if ("thread-group-created".equals(miEvent) || "thread-group-started".equals(miEvent)) { //$NON-NLS-1$ //$NON-NLS-2$ >@@ -295,8 +305,7 @@ > procDmc = DMContexts.getAncestorOfType(containerDmc, IProcessDMContext.class); > } else { > // This code would only trigger if the groupId was provided by MI >- procDmc = procService.createProcessContext(fControlDmc, groupId); >- containerDmc = procService.createContainerContext(procDmc, groupId); >+ containerDmc = procService.createContainerContextFromGroupId(fControlDmc, groupId); > } > > IExecutionDMContext execDmc = containerDmc;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
marc.khouzam
:
iplog-
Actions:
View
|
Diff
Attachments on
bug 317500
: 180122 |
180123