mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Merge the GdbRemoteLaunchDelegate and the
GdbLocalLaunchDelegate into a single GdbLaunchDelegate
This commit is contained in:
parent
a7fa912306
commit
89f4a41f0e
6 changed files with 32 additions and 309 deletions
|
@ -4,7 +4,7 @@
|
|||
<extension point="org.eclipse.debug.core.launchConfigurationTypes">
|
||||
<launchConfigurationType
|
||||
sourceLocatorId="org.eclipse.cdt.debug.core.sourceLocator"
|
||||
delegate="org.eclipse.dd.gdb.launch.launching.GdbLocalLaunchDelegate"
|
||||
delegate="org.eclipse.dd.gdb.launch.launching.GdbLaunchDelegate"
|
||||
public="true"
|
||||
sourcePathComputerId="org.eclipse.cdt.debug.core.sourcePathComputer"
|
||||
name="Local C/C++ Application (Experimental - DSF)"
|
||||
|
@ -12,7 +12,7 @@
|
|||
modes="debug">
|
||||
</launchConfigurationType>
|
||||
<launchConfigurationType
|
||||
delegate="org.eclipse.dd.gdb.launch.launching.GdbRemoteLaunchDelegate"
|
||||
delegate="org.eclipse.dd.gdb.launch.launching.GdbLaunchDelegate"
|
||||
id="org.eclipse.dd.gdb.launch.remoteCLaunch"
|
||||
modes="debug"
|
||||
name="Remote C/C++ Application (Experimental - DSF)"
|
||||
|
|
|
@ -56,10 +56,10 @@ public class GdbLaunch extends Launch
|
|||
|
||||
// Create the dispatch queue to be used by debugger control and services
|
||||
// that belong to this launch
|
||||
final DefaultDsfExecutor dsfExecutor = new DefaultDsfExecutor(GdbLocalLaunchDelegate.GDB_DEBUG_MODEL_ID);
|
||||
final DefaultDsfExecutor dsfExecutor = new DefaultDsfExecutor(GdbLaunchDelegate.GDB_DEBUG_MODEL_ID);
|
||||
dsfExecutor.prestartCoreThread();
|
||||
fExecutor = dsfExecutor;
|
||||
fSession = DsfSession.startSession(fExecutor, GdbLocalLaunchDelegate.GDB_DEBUG_MODEL_ID);
|
||||
fSession = DsfSession.startSession(fExecutor, GdbLaunchDelegate.GDB_DEBUG_MODEL_ID);
|
||||
}
|
||||
|
||||
public DsfExecutor getDsfExecutor() { return fExecutor; }
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.eclipse.dd.dsf.debug.service.IMemory.IMemoryDMContext;
|
|||
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
||||
import org.eclipse.dd.gdb.launch.internal.GdbLaunchPlugin;
|
||||
import org.eclipse.dd.gdb.service.command.GDBControl;
|
||||
import org.eclipse.dd.gdb.service.command.GDBControl.SessionType;
|
||||
import org.eclipse.dd.mi.service.command.AbstractCLIProcess;
|
||||
import org.eclipse.dd.mi.service.command.MIInferiorProcess;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
|
@ -54,10 +55,11 @@ import org.eclipse.debug.core.sourcelookup.IPersistableSourceLocator2;
|
|||
* The launch configuration delegate for the CDI debugger session types.
|
||||
*/
|
||||
@ThreadSafe
|
||||
public class GdbLocalLaunchDelegate extends AbstractCLaunchDelegate
|
||||
public class GdbLaunchDelegate extends AbstractCLaunchDelegate
|
||||
implements ILaunchConfigurationDelegate2
|
||||
{
|
||||
public final static String GDB_DEBUG_MODEL_ID = "org.eclipse.dd.gdb"; //$NON-NLS-1$
|
||||
private SessionType fSessionType;
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.launch.AbstractCLaunchDelegate#launch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.debug.core.ILaunch, org.eclipse.core.runtime.IProgressMonitor)
|
||||
|
@ -80,21 +82,36 @@ public class GdbLocalLaunchDelegate extends AbstractCLaunchDelegate
|
|||
try {
|
||||
String debugMode = config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN );
|
||||
if (debugMode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN)) {
|
||||
launchLocalDebugSession( config, launch, monitor );
|
||||
fSessionType = SessionType.RUN;
|
||||
} else if (debugMode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH)) {
|
||||
fSessionType = SessionType.ATTACH;
|
||||
} else if (debugMode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_CORE)) {
|
||||
fSessionType = SessionType.CORE;
|
||||
} else if (debugMode.equals(IGDBLaunchConfigurationConstants.DEBUGGER_MODE_REMOTE)) {
|
||||
fSessionType = SessionType.REMOTE;
|
||||
} else {
|
||||
fSessionType = SessionType.RUN;
|
||||
}
|
||||
|
||||
launchDebugSession( config, launch, monitor );
|
||||
}
|
||||
finally {
|
||||
monitor.done();
|
||||
}
|
||||
}
|
||||
|
||||
private void launchLocalDebugSession( final ILaunchConfiguration config, ILaunch l, IProgressMonitor monitor ) throws CoreException {
|
||||
private void launchDebugSession( final ILaunchConfiguration config, ILaunch l, IProgressMonitor monitor ) throws CoreException {
|
||||
if ( monitor.isCanceled() ) {
|
||||
return;
|
||||
}
|
||||
final GdbLaunch launch = (GdbLaunch)l;
|
||||
|
||||
|
||||
if (fSessionType == SessionType.REMOTE) {
|
||||
monitor.subTask( "Debugging remote C/C++ application" ); //$NON-NLS-1$
|
||||
} else {
|
||||
monitor.subTask( "Debugging local C/C++ application" ); //$NON-NLS-1$
|
||||
}
|
||||
IPath exePath = verifyProgramPath( config );
|
||||
ICProject project = verifyCProject( config );
|
||||
if ( exePath != null ) {
|
|
@ -1,292 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2008 Ericsson and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Ericsson - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.dd.gdb.launch.launching;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
||||
import org.eclipse.cdt.launch.AbstractCLaunchDelegate;
|
||||
import org.eclipse.cdt.launch.internal.ui.LaunchMessages;
|
||||
import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin;
|
||||
import org.eclipse.cdt.utils.pty.PTY;
|
||||
import org.eclipse.cdt.utils.spawner.ProcessFactory;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
|
||||
import org.eclipse.dd.dsf.debug.model.DsfMemoryBlockRetrieval;
|
||||
import org.eclipse.dd.dsf.debug.service.IMemory.IMemoryDMContext;
|
||||
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
||||
import org.eclipse.dd.gdb.launch.internal.GdbLaunchPlugin;
|
||||
import org.eclipse.dd.gdb.service.command.GDBControl;
|
||||
import org.eclipse.dd.mi.service.command.AbstractCLIProcess;
|
||||
import org.eclipse.dd.mi.service.command.MIInferiorProcess;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.DebugPlugin;
|
||||
import org.eclipse.debug.core.ILaunch;
|
||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
||||
import org.eclipse.debug.core.ILaunchManager;
|
||||
import org.eclipse.debug.core.IStatusHandler;
|
||||
import org.eclipse.debug.core.model.ILaunchConfigurationDelegate2;
|
||||
import org.eclipse.debug.core.model.IMemoryBlockRetrieval;
|
||||
import org.eclipse.debug.core.model.IPersistableSourceLocator;
|
||||
import org.eclipse.debug.core.model.ISourceLocator;
|
||||
import org.eclipse.debug.core.sourcelookup.IPersistableSourceLocator2;
|
||||
|
||||
/**
|
||||
* The launch configuration delegate for the CDI debugger session types.
|
||||
*/
|
||||
@ThreadSafe
|
||||
public class GdbRemoteLaunchDelegate extends AbstractCLaunchDelegate
|
||||
implements ILaunchConfigurationDelegate2
|
||||
{
|
||||
public final static String GDB_DEBUG_MODEL_ID = "org.eclipse.dd.gdb"; //$NON-NLS-1$
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.launch.AbstractCLaunchDelegate#launch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.debug.core.ILaunch, org.eclipse.core.runtime.IProgressMonitor)
|
||||
*/
|
||||
@Override
|
||||
public void launch( ILaunchConfiguration config, String mode, ILaunch launch, IProgressMonitor monitor ) throws CoreException {
|
||||
if ( monitor == null ) {
|
||||
monitor = new NullProgressMonitor();
|
||||
}
|
||||
if ( mode.equals( ILaunchManager.DEBUG_MODE ) ) {
|
||||
launchDebugger( config, launch, monitor );
|
||||
}
|
||||
}
|
||||
|
||||
private void launchDebugger( ILaunchConfiguration config, ILaunch launch, IProgressMonitor monitor ) throws CoreException {
|
||||
monitor.beginTask("Launching debugger session", 10); //$NON-NLS-1$
|
||||
if ( monitor.isCanceled() ) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
String debugMode = config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, IGDBLaunchConfigurationConstants.DEBUGGER_MODE_REMOTE );
|
||||
if ( debugMode.equals( IGDBLaunchConfigurationConstants.DEBUGGER_MODE_REMOTE ) ) {
|
||||
launchRemoteDebugSession( config, launch, monitor );
|
||||
}
|
||||
}
|
||||
finally {
|
||||
monitor.done();
|
||||
}
|
||||
}
|
||||
|
||||
private void launchRemoteDebugSession( final ILaunchConfiguration config, ILaunch l, IProgressMonitor monitor ) throws CoreException {
|
||||
if ( monitor.isCanceled() ) {
|
||||
return;
|
||||
}
|
||||
final GdbLaunch launch = (GdbLaunch)l;
|
||||
|
||||
monitor.subTask( "Debugging remote C/C++ application" ); //$NON-NLS-1$
|
||||
IPath exePath = verifyProgramPath( config );
|
||||
ICProject project = verifyCProject( config );
|
||||
if ( exePath != null ) {
|
||||
verifyBinary( project, exePath );
|
||||
}
|
||||
|
||||
setDefaultSourceLocator(launch, config);
|
||||
|
||||
monitor.worked( 1 );
|
||||
|
||||
|
||||
// Create and invoke the launch sequence to create the debug control and services
|
||||
final LaunchSequence launchSequence =
|
||||
new LaunchSequence(launch.getSession(), launch, exePath);
|
||||
launch.getSession().getExecutor().execute(launchSequence);
|
||||
try {
|
||||
launchSequence.get();
|
||||
} catch (InterruptedException e1) {
|
||||
throw new DebugException(new Status(IStatus.ERROR, GdbLaunchPlugin.PLUGIN_ID, DebugException.INTERNAL_ERROR, "Interrupted Exception in dispatch thread", e1)); //$NON-NLS-1$
|
||||
} catch (ExecutionException e1) {
|
||||
throw new DebugException(new Status(IStatus.ERROR, GdbLaunchPlugin.PLUGIN_ID, DebugException.REQUEST_FAILED, "Error in launch sequence", e1.getCause())); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
launch.initializeControl();
|
||||
|
||||
// Add the CLI and "inferior" process objects to the launch.
|
||||
final AtomicReference<AbstractCLIProcess> cliProcessRef = new AtomicReference<AbstractCLIProcess>();
|
||||
final AtomicReference<MIInferiorProcess> inferiorProcessRef = new AtomicReference<MIInferiorProcess>();
|
||||
try {
|
||||
launch.getDsfExecutor().submit( new Callable<Object>() {
|
||||
public Object call() throws CoreException {
|
||||
DsfServicesTracker tracker = new DsfServicesTracker(GdbLaunchPlugin.getBundleContext(), launch.getSession().getId());
|
||||
GDBControl gdb = tracker.getService(GDBControl.class);
|
||||
if (gdb != null) {
|
||||
cliProcessRef.set(gdb.getCLIProcess());
|
||||
inferiorProcessRef.set(gdb.getInferiorProcess());
|
||||
}
|
||||
tracker.dispose();
|
||||
return null;
|
||||
}
|
||||
}).get();
|
||||
launch.addProcess(DebugPlugin.newProcess(launch, cliProcessRef.get(), "gdb")); //$NON-NLS-1$
|
||||
launch.addProcess(DebugPlugin.newProcess(launch, inferiorProcessRef.get(), exePath.lastSegment()));
|
||||
} catch (InterruptedException e) {
|
||||
throw new CoreException(new Status(IStatus.ERROR, GdbLaunchPlugin.PLUGIN_ID, 0, "Interrupted while waiting for get process callable.", e)); //$NON-NLS-1$
|
||||
} catch (ExecutionException e) {
|
||||
throw (CoreException)e.getCause();
|
||||
} catch (RejectedExecutionException e) {
|
||||
throw new CoreException(new Status(IStatus.ERROR, GdbLaunchPlugin.PLUGIN_ID, 0, "Debugger shut down before launch was completed.", e)); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
// Create a memory retrieval and register it with session
|
||||
try {
|
||||
launch.getDsfExecutor().submit( new Callable<Object>() {
|
||||
public Object call() throws CoreException {
|
||||
DsfServicesTracker tracker = new DsfServicesTracker(GdbLaunchPlugin.getBundleContext(), launch.getSession().getId());
|
||||
GDBControl gdbControl = tracker.getService(GDBControl.class);
|
||||
if (gdbControl != null) {
|
||||
IMemoryBlockRetrieval memRetrieval = new DsfMemoryBlockRetrieval(
|
||||
GDB_DEBUG_MODEL_ID, config, (IMemoryDMContext)gdbControl.getControlDMContext());
|
||||
launch.getSession().registerModelAdapter(IMemoryBlockRetrieval.class, memRetrieval);
|
||||
((DsfMemoryBlockRetrieval) memRetrieval).initialize();
|
||||
}
|
||||
tracker.dispose();
|
||||
return null;
|
||||
}
|
||||
}).get();
|
||||
} catch (InterruptedException e) {
|
||||
throw new CoreException(new Status(IStatus.ERROR, GdbLaunchPlugin.PLUGIN_ID, 0, "Interrupted while waiting for get process callable.", e)); //$NON-NLS-1$
|
||||
} catch (ExecutionException e) {
|
||||
throw (CoreException)e.getCause();
|
||||
} catch (RejectedExecutionException e) {
|
||||
throw new CoreException(new Status(IStatus.ERROR, GdbLaunchPlugin.PLUGIN_ID, 0, "Debugger shut down before launch was completed.", e)); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.launch.AbstractCLaunchDelegate#getPluginID()
|
||||
*/
|
||||
@Override
|
||||
protected String getPluginID() {
|
||||
return LaunchUIPlugin.getUniqueIdentifier();
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a runtime exec on the given command line in the context of the
|
||||
* specified working directory, and returns the resulting process. If the
|
||||
* current runtime does not support the specification of a working
|
||||
* directory, the status handler for error code
|
||||
* <code>ERR_WORKING_DIRECTORY_NOT_SUPPORTED</code> is queried to see if
|
||||
* the exec should be re-executed without specifying a working directory.
|
||||
*
|
||||
* @param cmdLine
|
||||
* the command line
|
||||
* @param workingDirectory
|
||||
* the working directory, or <code>null</code>
|
||||
* @return the resulting process or <code>null</code> if the exec is
|
||||
* cancelled
|
||||
* @see Runtime
|
||||
*/
|
||||
protected Process exec( String[] cmdLine, String[] environ, File workingDirectory, boolean usePty ) throws CoreException {
|
||||
Process p = null;
|
||||
try {
|
||||
if ( workingDirectory == null ) {
|
||||
p = ProcessFactory.getFactory().exec( cmdLine, environ );
|
||||
}
|
||||
else {
|
||||
if ( usePty && PTY.isSupported() ) {
|
||||
p = ProcessFactory.getFactory().exec( cmdLine, environ, workingDirectory, new PTY() );
|
||||
}
|
||||
else {
|
||||
p = ProcessFactory.getFactory().exec( cmdLine, environ, workingDirectory );
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( IOException e ) {
|
||||
if ( p != null ) {
|
||||
p.destroy();
|
||||
}
|
||||
abort( "Error starting process.", e, ICDTLaunchConfigurationConstants.ERR_INTERNAL_ERROR ); //$NON-NLS-1$
|
||||
}
|
||||
catch( NoSuchMethodError e ) {
|
||||
// attempting launches on 1.2.* - no ability to set working
|
||||
// directory
|
||||
IStatus status = new Status( IStatus.ERROR, LaunchUIPlugin.getUniqueIdentifier(), ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_NOT_SUPPORTED, LaunchMessages.getString( "LocalDsfLaunchDelegate.9" ), e ); //$NON-NLS-1$
|
||||
IStatusHandler handler = DebugPlugin.getDefault().getStatusHandler( status );
|
||||
if ( handler != null ) {
|
||||
Object result = handler.handleStatus( status, this );
|
||||
if ( result instanceof Boolean && ((Boolean)result).booleanValue() ) {
|
||||
p = exec( cmdLine, environ, null, usePty );
|
||||
}
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.launch.AbstractCLaunchDelegate#preLaunchCheck(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
|
||||
*/
|
||||
@Override
|
||||
public boolean preLaunchCheck( ILaunchConfiguration config, String mode, IProgressMonitor monitor ) throws CoreException {
|
||||
// no pre launch check for core file
|
||||
if ( mode.equals( ILaunchManager.DEBUG_MODE ) ) {
|
||||
if ( ICDTLaunchConfigurationConstants.DEBUGGER_MODE_CORE.equals( config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN ) ) )
|
||||
return true;
|
||||
}
|
||||
return super.preLaunchCheck( config, mode, monitor );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ILaunchConfigurationDelegate2
|
||||
@Override
|
||||
public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean finalLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ILaunch getLaunch(ILaunchConfiguration configuration, String mode) throws CoreException {
|
||||
// Need to configure the source locator before creating the launch
|
||||
// because once the launch is created and added to launch manager,
|
||||
// the adapters will be created for the whole session, including
|
||||
// the source lookup adapter.
|
||||
ISourceLocator locator = getSourceLocator(configuration);
|
||||
|
||||
return new GdbLaunch(configuration, mode, locator);
|
||||
}
|
||||
|
||||
private ISourceLocator getSourceLocator(ILaunchConfiguration configuration) throws CoreException {
|
||||
String type = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID, (String)null);
|
||||
if (type == null) {
|
||||
type = configuration.getType().getSourceLocatorId();
|
||||
}
|
||||
if (type != null) {
|
||||
IPersistableSourceLocator locator = DebugPlugin.getDefault().getLaunchManager().newSourceLocator(type);
|
||||
String memento = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO, (String)null);
|
||||
if (memento == null) {
|
||||
locator.initializeDefaults(configuration);
|
||||
} else {
|
||||
if(locator instanceof IPersistableSourceLocator2)
|
||||
((IPersistableSourceLocator2)locator).initializeFromMemento(memento, configuration);
|
||||
else
|
||||
locator.initializeFromMemento(memento);
|
||||
}
|
||||
return locator;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -28,8 +28,7 @@ import org.eclipse.dd.dsf.service.DsfSession;
|
|||
import org.eclipse.dd.gdb.internal.ui.actions.DsfTerminateCommand;
|
||||
import org.eclipse.dd.gdb.internal.ui.viewmodel.GdbViewModelAdapter;
|
||||
import org.eclipse.dd.gdb.launch.launching.GdbLaunch;
|
||||
import org.eclipse.dd.gdb.launch.launching.GdbLocalLaunchDelegate;
|
||||
import org.eclipse.dd.gdb.launch.launching.GdbRemoteLaunchDelegate;
|
||||
import org.eclipse.dd.gdb.launch.launching.GdbLaunchDelegate;
|
||||
import org.eclipse.debug.core.DebugPlugin;
|
||||
import org.eclipse.debug.core.ILaunch;
|
||||
import org.eclipse.debug.core.ILaunchesListener2;
|
||||
|
@ -102,8 +101,7 @@ public class GdbAdapterFactory
|
|||
fDebugModelProvider = new IDebugModelProvider() {
|
||||
// @see org.eclipse.debug.core.model.IDebugModelProvider#getModelIdentifiers()
|
||||
public String[] getModelIdentifiers() {
|
||||
return new String[] { GdbLocalLaunchDelegate.GDB_DEBUG_MODEL_ID,
|
||||
GdbRemoteLaunchDelegate.GDB_DEBUG_MODEL_ID};
|
||||
return new String[] { GdbLaunchDelegate.GDB_DEBUG_MODEL_ID };
|
||||
}
|
||||
};
|
||||
session.registerModelAdapter(IDebugModelProvider.class, fDebugModelProvider);
|
||||
|
|
|
@ -13,7 +13,7 @@ package org.eclipse.dd.gdb.internal.ui.breakpoints;
|
|||
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.dd.gdb.breakpoints.CBreakpointGdbThreadsFilterExtension;
|
||||
import org.eclipse.dd.gdb.launch.launching.GdbLocalLaunchDelegate;
|
||||
import org.eclipse.dd.gdb.launch.launching.GdbLaunchDelegate;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
|
@ -50,7 +50,7 @@ public class CBreakpointGdbThreadFilterPage extends PropertyPage {
|
|||
try {
|
||||
CBreakpointGdbThreadsFilterExtension filter =
|
||||
(CBreakpointGdbThreadsFilterExtension) bp.getExtension(
|
||||
GdbLocalLaunchDelegate.GDB_DEBUG_MODEL_ID, CBreakpointGdbThreadsFilterExtension.class);
|
||||
GdbLaunchDelegate.GDB_DEBUG_MODEL_ID, CBreakpointGdbThreadsFilterExtension.class);
|
||||
filter.initialize(bp);
|
||||
return filter;
|
||||
} catch (CoreException e) {}
|
||||
|
|
Loading…
Add table
Reference in a new issue