From 063ca7472b49ce13fc0129f9baaa339a453bf88c Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Thu, 28 Nov 2002 23:45:16 +0000 Subject: [PATCH] 'exec-until' instead of temporary breakpoints for 'run to line'. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 5 ++ .../internal/core/model/CDebugTarget.java | 80 ++++--------------- .../debug/internal/core/model/CThread.java | 40 ++++++++++ 3 files changed, 59 insertions(+), 66 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index d153d5a3f5a..f8ce8a2b767 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,8 @@ +2002-11-28 Mikhail Khodjaiants + 'exec-until' instead of temporary breakpoints for 'run to line'. + * CDebugTarget.java + * CThread.java + 2002-11-28 Mikhail Khodjaiants Live editing of the memory view: removed support of the 'Save Changes' action. * IFormattedMemoryBlock.java 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 f5f86d85532..b309ea9fbf4 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 @@ -211,11 +211,6 @@ public class CDebugTarget extends CDebugElement */ private List fRegisterGroups; - /** - * Collection of temporary breakpoints set at this target. Values are of type ICBreakpoint. - */ - private List fTemporaryBreakpoints; - /** * A memory manager for this target. */ @@ -253,7 +248,6 @@ public class CDebugTarget extends CDebugElement setProcesses( debuggeeProcess, debuggerProcess ); setCDITarget( cdiTarget ); setBreakpoints( new HashMap( 5 ) ); - setTemporaryBreakpoints( new ArrayList() ); setExecFile( file ); if ( getExecFile() != null ) { @@ -849,6 +843,8 @@ public class CDebugTarget extends CDebugElement return this; if ( adapter.equals( IExecFileInfo.class ) ) return this; + if ( adapter.equals( IRunToLine.class ) ) + return this; return super.getAdapter( adapter ); } @@ -1197,28 +1193,6 @@ public class CDebugTarget extends CDebugElement } } - /** - * Removes all temporary breakpoints from this target. - * - */ - protected void removeAllTemporaryBreakpoints() - { - ICDIBreakpoint[] cdiBreakpoints = (ICDIBreakpoint[])getTemporaryBreakpoints().toArray( new ICDIBreakpoint[0] ); - ICDIBreakpointManager bm = getCDISession().getBreakpointManager(); - if ( cdiBreakpoints.length > 0 ) - { - try - { - bm.deleteBreakpoints( cdiBreakpoints ); - getTemporaryBreakpoints().clear(); - } - catch( CDIException e ) - { - logError( e ); - } - } - } - protected void changeBreakpointProperties( CBreakpoint breakpoint, IMarkerDelta delta ) throws DebugException { ICDIBreakpoint cdiBreakpoint = findCDIBreakpoint( breakpoint ); @@ -1291,7 +1265,6 @@ public class CDebugTarget extends CDebugElement setCurrentStateId( IState.SUSPENDED ); ICDISessionObject reason = event.getReason(); setCurrentStateInfo( reason ); - removeAllTemporaryBreakpoints(); List newThreads = refreshThreads(); if ( event.getSource() instanceof ICDITarget ) { @@ -1577,24 +1550,6 @@ public class CDebugTarget extends CDebugElement return fBreakpoints; } - /** - * Returns the list of temporary breakpoints installed in this debug target. - * - * @return list of installed temporary breakpoints - */ - protected List getTemporaryBreakpoints() - { - return fTemporaryBreakpoints; - } - - /** - * Uninstalles all temporary breakpoints installed in this debug target. - * - */ - protected void deleteTemporaryBreakpoints() - { - } - /** * Sets the map of breakpoints installed in this debug target. * @@ -1605,16 +1560,6 @@ public class CDebugTarget extends CDebugElement fBreakpoints = breakpoints; } - /** - * Sets the list of temporary breakpoints installed in this debug target. - * - * @param breakpoints breakpoints list - */ - private void setTemporaryBreakpoints( List breakpoints ) - { - fTemporaryBreakpoints = breakpoints; - } - /** * Returns the debug configuration of this target. * @@ -1805,12 +1750,10 @@ public class CDebugTarget extends CDebugElement { try { - ICDIBreakpoint bkpt = getCDISession().getBreakpointManager(). - setLocationBreakpoint( ICDIBreakpoint.REGULAR, //ICDIBreakpoint.TEMPORARY, - location, - null, - null ); - getTemporaryBreakpoints().add( bkpt ); + getCDISession().getBreakpointManager().setLocationBreakpoint( ICDIBreakpoint.TEMPORARY, + location, + null, + null ); } catch( CDIException e ) { @@ -1833,11 +1776,16 @@ public class CDebugTarget extends CDebugElement public void runToLine( IResource resource, int lineNumber ) throws DebugException { if ( !canRunToLine( resource, lineNumber ) ) - { return; + ICDILocation location = getCDISession().getBreakpointManager().createLocation( resource.getLocation().lastSegment(), null, lineNumber ); + try + { + getCDITarget().runUntil( location ); + } + catch( CDIException e ) + { + targetRequestFailed( e.toString(), e ); } - setInternalTemporaryBreakpoint( getCDISession().getBreakpointManager().createLocation( resource.getLocation().lastSegment(), null, lineNumber ) ); - resume(); } /* (non-Javadoc) diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java index 69df692a089..52eb17377d0 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java @@ -13,11 +13,13 @@ import java.util.List; import org.eclipse.cdt.debug.core.IDummyStackFrame; import org.eclipse.cdt.debug.core.IInstructionStep; import org.eclipse.cdt.debug.core.IRestart; +import org.eclipse.cdt.debug.core.IRunToLine; import org.eclipse.cdt.debug.core.IState; import org.eclipse.cdt.debug.core.ISwitchToFrame; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDIConfiguration; import org.eclipse.cdt.debug.core.cdi.ICDIEndSteppingRange; +import org.eclipse.cdt.debug.core.cdi.ICDILocation; import org.eclipse.cdt.debug.core.cdi.ICDISessionObject; import org.eclipse.cdt.debug.core.cdi.ICDISignal; import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent; @@ -33,6 +35,7 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.cdi.model.ICDIThread; import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode; +import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; @@ -50,6 +53,7 @@ public class CThread extends CDebugElement implements IThread, IState, IRestart, + IRunToLine, IInstructionStep, ISwitchToFrame, ICDIEventListener @@ -1087,4 +1091,40 @@ public class CThread extends CDebugElement { return fLastStackDepth; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.IRunToLine#canRunToLine(IResource, int) + */ + public boolean canRunToLine( IResource resource, int lineNumber ) + { + return canResume(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.IRunToLine#runToLine(IResource, int) + */ + public void runToLine( IResource resource, int lineNumber ) throws DebugException + { + if ( !canRunToLine( resource, lineNumber ) ) + return; + ICDILocation location = getCDISession().getBreakpointManager().createLocation( resource.getLocation().lastSegment(), null, lineNumber ); + try + { + getCDIThread().runUntil( location ); + } + catch( CDIException e ) + { + targetRequestFailed( e.toString(), e ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) + */ + public Object getAdapter(Class adapter) + { + if ( adapter.equals( IRunToLine.class ) ) + return this; + return super.getAdapter(adapter); + } }