diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index f3d71f306a7..46e1d3c98df 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,10 @@ +2002-10-23 Mikhail Khodjaiants + Support for debugger console. + * CDebugModel.java: new factory methods for CDebugTarget + * IDebuggerProcessSupport: new interface that defines the debugger + process support functionality. + * CDebugTarget.java: implementation of IDebuggerProcessSupport interface. + 2002-10-22 Alain Magloire * src/.../cdi/ICDISession.java (getSessionProcess): diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java index d95fac59283..b418901c1ed 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java @@ -73,8 +73,8 @@ public class CDebugModel /** * Creates and returns a debug target for the given CDI target, with * the specified name, and associates the debug target with the - * given process for console I/O. The allow terminate flag specifies whether - * the debug target will support termination (ITerminate). + * given process for console I/O. The allow terminate flag specifies + * whether the debug target will support termination (ITerminate). * The allow disconnect flag specifies whether the debug target will * support disconnection (IDisconnect). The resume * flag specifies if the target process should be resumed on startup. @@ -111,6 +111,59 @@ public class CDebugModel cdiTarget, name, process, + null, + project, + allowTerminate, + allowDisconnect ); + } + }; + try + { + ResourcesPlugin.getWorkspace().run( r, null ); + } + catch( CoreException e ) + { + CDebugCorePlugin.log( e ); + throw new DebugException( e.getStatus() ); + } + + ICDIConfiguration config = cdiTarget.getSession().getConfiguration(); + + if ( config.supportsBreakpoints() && stopInMain ) + { + stopInMain( (CDebugTarget)target[0] ); + } + + if ( config.supportsResume() ) + { + target[0].resume(); + } + + return target[0]; + } + + public static IDebugTarget newDebugTarget( final ILaunch launch, + final ICDITarget cdiTarget, + final String name, + final IProcess debuggeeProcess, + final IProcess debuggerProcess, + final IProject project, + final boolean allowTerminate, + final boolean allowDisconnect, + final boolean stopInMain ) throws DebugException + { + final IDebugTarget[] target = new IDebugTarget[1]; + + IWorkspaceRunnable r = new IWorkspaceRunnable() + { + public void run( IProgressMonitor m ) + { + target[0] = new CDebugTarget( launch, + ICDebugTargetType.TARGET_TYPE_LOCAL_RUN, + cdiTarget, + name, + debuggeeProcess, + debuggerProcess, project, allowTerminate, allowDisconnect ); @@ -157,6 +210,57 @@ public class CDebugModel cdiTarget, name, null, + null, + project, + false, + true ); + } + }; + try + { + ResourcesPlugin.getWorkspace().run( r, null ); + } + catch( CoreException e ) + { + CDebugCorePlugin.log( e ); + throw new DebugException( e.getStatus() ); + } + + ((CDebugTarget)target[0]).handleDebugEvent( new ICDISuspendedEvent() + { + public ICDISessionObject getReason() + { + return null; + } + + public ICDIObject getSource() + { + return cdiTarget; + } + + } ); + + return target[0]; + } + + public static IDebugTarget newAttachDebugTarget( final ILaunch launch, + final ICDITarget cdiTarget, + final String name, + final IProcess debuggerProcess, + final IProject project ) throws DebugException + { + final IDebugTarget[] target = new IDebugTarget[1]; + + IWorkspaceRunnable r = new IWorkspaceRunnable() + { + public void run( IProgressMonitor m ) + { + target[0] = new CDebugTarget( launch, + ICDebugTargetType.TARGET_TYPE_LOCAL_ATTACH, + cdiTarget, + name, + null, + debuggerProcess, project, false, true ); @@ -205,6 +309,57 @@ public class CDebugModel cdiTarget, name, null, + null, + project, + true, + false ); + } + }; + try + { + ResourcesPlugin.getWorkspace().run( r, null ); + } + catch( CoreException e ) + { + CDebugCorePlugin.log( e ); + throw new DebugException( e.getStatus() ); + } + + ((CDebugTarget)target[0]).handleDebugEvent( new ICDISuspendedEvent() + { + public ICDISessionObject getReason() + { + return null; + } + + public ICDIObject getSource() + { + return cdiTarget; + } + + } ); + + return target[0]; + } + + public static IDebugTarget newCoreFileDebugTarget( final ILaunch launch, + final ICDITarget cdiTarget, + final String name, + final IProcess debuggerProcess, + final IProject project ) throws DebugException + { + final IDebugTarget[] target = new IDebugTarget[1]; + + IWorkspaceRunnable r = new IWorkspaceRunnable() + { + public void run( IProgressMonitor m ) + { + target[0] = new CDebugTarget( launch, + ICDebugTargetType.TARGET_TYPE_LOCAL_CORE_DUMP, + cdiTarget, + name, + null, + debuggerProcess, project, true, false ); diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IDebuggerProcessSupport.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IDebuggerProcessSupport.java new file mode 100644 index 00000000000..6c52a08dfe3 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IDebuggerProcessSupport.java @@ -0,0 +1,20 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core; + +/** + * Provides the functionality to support debugger console. + * + * @since: Oct 23, 2002 + */ +public interface IDebuggerProcessSupport +{ + boolean supportsDebuggerProcess(); + + boolean isDebuggerProcessDefault(); + + void setDebuggerProcessDefault( boolean value ); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index 114e1a4e689..263bda82107 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -18,6 +18,7 @@ import org.eclipse.cdt.debug.core.ICExpressionEvaluator; import org.eclipse.cdt.debug.core.ICLineBreakpoint; import org.eclipse.cdt.debug.core.ICMemoryManager; import org.eclipse.cdt.debug.core.ICWatchpoint; +import org.eclipse.cdt.debug.core.IDebuggerProcessSupport; import org.eclipse.cdt.debug.core.IFormattedMemoryBlock; import org.eclipse.cdt.debug.core.IFormattedMemoryRetrieval; import org.eclipse.cdt.debug.core.IRestart; @@ -101,7 +102,8 @@ public class CDebugTarget extends CDebugElement ILaunchListener, ISwitchToThread, IExpressionListener, - ICExpressionEvaluator + ICExpressionEvaluator, + IDebuggerProcessSupport { /** * The type of this target. @@ -116,9 +118,14 @@ public class CDebugTarget extends CDebugElement private ArrayList fThreads; /** - * Associated system process, or null if not available. + * Associated inferrior process, or null if not available. */ - private IProcess fProcess; + private IProcess fDebuggeeProcess = null; + + /** + * Associated debugger process, or null if not available. + */ + private IProcess fDebuggerProcess = null; /** * The underlying CDI target. @@ -205,6 +212,11 @@ public class CDebugTarget extends CDebugElement */ private CMemoryManager fMemoryManager; + /** + * A memory manager for this target. + */ + private boolean fIsDebuggerProcessDefault = false; + /** * Constructor for CDebugTarget. * @param target @@ -213,7 +225,8 @@ public class CDebugTarget extends CDebugElement int targetType, ICDITarget cdiTarget, String name, - IProcess process, + IProcess debuggeeProcess, + IProcess debuggerProcess, IProject project, boolean allowsTerminate, boolean allowsDisconnect ) @@ -223,7 +236,7 @@ public class CDebugTarget extends CDebugElement setTargetType( targetType ); setDebugTarget( this ); setName( name ); - setProcess( process ); + setProcesses( debuggeeProcess, debuggerProcess ); setCDITarget( cdiTarget ); setBreakpoints( new HashMap( 5 ) ); setTemporaryBreakpoints( new ArrayList() ); @@ -307,7 +320,7 @@ public class CDebugTarget extends CDebugElement */ public IProcess getProcess() { - return fProcess; + return ( fIsDebuggerProcessDefault ) ? fDebuggerProcess : fDebuggeeProcess; } /** @@ -318,9 +331,10 @@ public class CDebugTarget extends CDebugElement * underlying CDI target, or null if no process is * associated with this debug target (for example, a core dump debugging). */ - protected void setProcess( IProcess process ) + protected void setProcesses( IProcess debuggeeProcess, IProcess debuggerProcess ) { - fProcess = process; + fDebuggeeProcess = debuggeeProcess; + fDebuggerProcess = debuggerProcess; } /* (non-Javadoc) @@ -1920,4 +1934,29 @@ public class CDebugTarget extends CDebugElement { getMemoryManager().dispose(); } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.IDebuggerProcessSupport#isDefault() + */ + public boolean isDebuggerProcessDefault() + { + return fIsDebuggerProcessDefault; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.IDebuggerProcessSupport#setDefault(boolean) + */ + public void setDebuggerProcessDefault( boolean value ) + { + fIsDebuggerProcessDefault = value; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.IDebuggerProcessSupport#supportsDebuggerProcess() + */ + public boolean supportsDebuggerProcess() + { + return ( fDebuggerProcess != null ); + } + }