mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-10 01:35:39 +02:00
Bug 210366: Use the process factory so also create the gdb process.
This commit is contained in:
parent
ddb64447b2
commit
4fc4a8bc3b
5 changed files with 33 additions and 7 deletions
|
@ -8,6 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Ericsson - initial implementation
|
* Ericsson - initial implementation
|
||||||
* Anton Gorenkov - Need to use a process factory (Bug 210366)
|
* Anton Gorenkov - Need to use a process factory (Bug 210366)
|
||||||
|
* Marc Khouzam (Ericsson) - Support for factory to create the gdb process (Bug 210366)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.dsf.gdb;
|
package org.eclipse.cdt.dsf.gdb;
|
||||||
|
|
||||||
|
@ -43,7 +44,16 @@ public interface IGdbDebugConstants {
|
||||||
* (which is used by default).
|
* (which is used by default).
|
||||||
* @since 4.1
|
* @since 4.1
|
||||||
*/
|
*/
|
||||||
public static final String INFERIOR_CREATION_VALUE = PREFIX + "inferiorProcess"; //$NON-NLS-1$
|
public static final String INFERIOR_PROCESS_CREATION_VALUE = PREFIX + "inferiorProcess"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attribute value of PROCESS_TYPE_CREATION_ATTR to be passed to DebugPlugin.newProcess to
|
||||||
|
* require the creation of an GdbProcess instead of a RuntimeProcess
|
||||||
|
* (which is used by default).
|
||||||
|
* @since 4.1
|
||||||
|
*/
|
||||||
|
public static final String GDB_PROCESS_CREATION_VALUE = PREFIX + "gdbProcess"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,12 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Wind River Systems - initial API and implementation
|
* Wind River Systems - initial API and implementation
|
||||||
* Marc Khouzam (Ericsson) - Fix NPE for partial launches (Bug 368597)
|
* Marc Khouzam (Ericsson) - Fix NPE for partial launches (Bug 368597)
|
||||||
|
* Marc Khouzam (Ericsson) - Create the gdb process through the process factory (Bug 210366)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.dsf.gdb.launching;
|
package org.eclipse.cdt.dsf.gdb.launching;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
@ -33,6 +36,7 @@ import org.eclipse.cdt.dsf.debug.service.IMemory.IMemoryDMContext;
|
||||||
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
|
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlShutdownDMEvent;
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlShutdownDMEvent;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.IGdbDebugConstants;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.memory.GdbMemoryBlockRetrieval;
|
import org.eclipse.cdt.dsf.gdb.internal.memory.GdbMemoryBlockRetrieval;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
||||||
|
@ -173,8 +177,14 @@ public class GdbLaunch extends DsfLaunch
|
||||||
}
|
}
|
||||||
}).get();
|
}).get();
|
||||||
|
|
||||||
GDBProcess gdbProcess = new GDBProcess(this, cliProc, label, null);
|
// Need to go through DebugPlugin.newProcess so that we can use
|
||||||
addProcess(gdbProcess);
|
// the overrideable process factory to allow others to override.
|
||||||
|
// First set attribute to specify we want to create the gdb process.
|
||||||
|
// Bug 210366
|
||||||
|
Map<String, String> attributes = new HashMap<String, String>();
|
||||||
|
attributes.put(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR,
|
||||||
|
IGdbDebugConstants.GDB_PROCESS_CREATION_VALUE);
|
||||||
|
DebugPlugin.newProcess(this, cliProc, label, attributes);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
throw new CoreException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, 0, "Interrupted while waiting for get process callable.", e)); //$NON-NLS-1$
|
throw new CoreException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, 0, "Interrupted while waiting for get process callable.", e)); //$NON-NLS-1$
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Anton Gorenkov - initial API and implementation (Bug 210366)
|
* Anton Gorenkov - initial API and implementation (Bug 210366)
|
||||||
|
* Marc Khouzam (Ericsson) - Add support to create the gdb process as well (Bug 210366)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.dsf.gdb.launching;
|
package org.eclipse.cdt.dsf.gdb.launching;
|
||||||
|
|
||||||
|
@ -29,10 +30,15 @@ public class GdbProcessFactory implements IProcessFactory {
|
||||||
@Override
|
@Override
|
||||||
public IProcess newProcess(ILaunch launch, Process process, String label, Map attributes) {
|
public IProcess newProcess(ILaunch launch, Process process, String label, Map attributes) {
|
||||||
if (attributes != null) {
|
if (attributes != null) {
|
||||||
if (IGdbDebugConstants.INFERIOR_CREATION_VALUE.equals(attributes.get(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR))) {
|
if (IGdbDebugConstants.GDB_PROCESS_CREATION_VALUE.equals(attributes.get(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR))) {
|
||||||
|
return new GDBProcess(launch, process, label, attributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IGdbDebugConstants.INFERIOR_PROCESS_CREATION_VALUE.equals(attributes.get(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR))) {
|
||||||
return new InferiorRuntimeProcess(launch, process, label, attributes);
|
return new InferiorRuntimeProcess(launch, process, label, attributes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new RuntimeProcess(launch, process, label, attributes);
|
return new RuntimeProcess(launch, process, label, attributes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -552,7 +552,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
|
||||||
// Bug 210366
|
// Bug 210366
|
||||||
Map<String, String> attributes = new HashMap<String, String>();
|
Map<String, String> attributes = new HashMap<String, String>();
|
||||||
attributes.put(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR,
|
attributes.put(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR,
|
||||||
IGdbDebugConstants.INFERIOR_CREATION_VALUE);
|
IGdbDebugConstants.INFERIOR_PROCESS_CREATION_VALUE);
|
||||||
IProcess runtimeInferior = DebugPlugin.newProcess(launch, inferior, label, attributes);
|
IProcess runtimeInferior = DebugPlugin.newProcess(launch, inferior, label, attributes);
|
||||||
// Now set the inferior groupId
|
// Now set the inferior groupId
|
||||||
runtimeInferior.setAttribute(IGdbDebugConstants.INFERIOR_GROUPID_ATTR, MIProcesses.UNIQUE_GROUP_ID);
|
runtimeInferior.setAttribute(IGdbDebugConstants.INFERIOR_GROUPID_ATTR, MIProcesses.UNIQUE_GROUP_ID);
|
||||||
|
|
|
@ -370,7 +370,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence {
|
||||||
// Bug 210366
|
// Bug 210366
|
||||||
Map<String, String> attributes = new HashMap<String, String>();
|
Map<String, String> attributes = new HashMap<String, String>();
|
||||||
attributes.put(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR,
|
attributes.put(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR,
|
||||||
IGdbDebugConstants.INFERIOR_CREATION_VALUE);
|
IGdbDebugConstants.INFERIOR_PROCESS_CREATION_VALUE);
|
||||||
IProcess runtimeInferior = DebugPlugin.newProcess(launch, inferior, label, attributes);
|
IProcess runtimeInferior = DebugPlugin.newProcess(launch, inferior, label, attributes);
|
||||||
// Now set the inferior groupId
|
// Now set the inferior groupId
|
||||||
runtimeInferior.setAttribute(IGdbDebugConstants.INFERIOR_GROUPID_ATTR, groupId);
|
runtimeInferior.setAttribute(IGdbDebugConstants.INFERIOR_GROUPID_ATTR, groupId);
|
||||||
|
|
Loading…
Add table
Reference in a new issue