diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 3b8473d1845..f6d17307925 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,10 @@ +2004-10-21 Mikhail Khodjaiants + Thread should handle CDI events from the corresponding CDI thread only. + "canSuspend" should return true if the thread is stepping. + New implementation of "stepReturn" for stack frames. + * CThread.java + * CStackFrame.java + 2004-10-21 Mikhail Khodjaiants Pass the target state to threads on terminate, disconnect, resume, suspend and restart. * CoreModelMessages.properties diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java index 08ee1986a77..4e63051cd90 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java @@ -14,6 +14,7 @@ import java.text.MessageFormat; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -119,7 +120,7 @@ public class CStackFrame extends CDebugElement implements ICStackFrame, IRestart } setRefreshVariables( false ); } - return fVariables; + return ( fVariables != null ) ? fVariables : Collections.EMPTY_LIST; } /** @@ -308,12 +309,7 @@ public class CStackFrame extends CDebugElement implements ICStackFrame, IRestart */ public void stepReturn() throws DebugException { if ( canStepReturn() ) { - try { - getCDIStackFrame().stepReturn(); - } - catch( CDIException e ) { - targetRequestFailed( e.getMessage(), null ); - } + getThread().stepReturn(); } } @@ -680,4 +676,13 @@ public class CStackFrame extends CDebugElement implements ICStackFrame, IRestart CDebugTarget target = ((CDebugTarget)getDebugTarget()); return target.supportsExpressionEvaluation() && target.isSuspended(); } + + protected void doStepReturn() throws DebugException { + try { + getCDIStackFrame().stepReturn(); + } + catch( CDIException e ) { + targetRequestFailed( e.getMessage(), null ); + } + } } \ No newline at end of file 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 099b3384067..009f6f987fa 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 @@ -357,31 +357,21 @@ public class CThread extends CDebugElement implements ICThread, IRestart, IResum ICDIObject source = event.getSource(); if ( source == null ) continue; - if ( source.getTarget().equals( getCDITarget() ) ) { + if ( source instanceof ICDIThread && source.equals( getCDIThread() ) ) { if ( event instanceof ICDISuspendedEvent ) { - if ( source instanceof ICDIThread && getCDIThread().equals( (ICDIThread)source ) ) { handleSuspendedEvent( (ICDISuspendedEvent)event ); - } } else if ( event instanceof ICDIResumedEvent ) { - if ( (source instanceof ICDIThread && source.equals( getCDIThread() )) ) { handleResumedEvent( (ICDIResumedEvent)event ); - } } else if ( event instanceof ICDIDestroyedEvent ) { - if ( source instanceof ICDIThread ) { handleTerminatedEvent( (ICDIDestroyedEvent)event ); - } } else if ( event instanceof ICDIDisconnectedEvent ) { - if ( source instanceof ICDIThread ) { handleDisconnectedEvent( (ICDIDisconnectedEvent)event ); - } } else if ( event instanceof ICDIChangedEvent ) { - if ( source instanceof ICDIThread ) { handleChangedEvent( (ICDIChangedEvent)event ); - } } } } @@ -398,7 +388,8 @@ public class CThread extends CDebugElement implements ICThread, IRestart, IResum * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend() */ public boolean canSuspend() { - return ( fConfig.supportsSuspend() && getState().equals( CDebugElementState.RESUMED ) ); + CDebugElementState state = getState(); + return ( fConfig.supportsSuspend() && (state.equals( CDebugElementState.RESUMED ) || state.equals( CDebugElementState.STEPPED )) ); } /* (non-Javadoc) @@ -566,14 +557,14 @@ public class CThread extends CDebugElement implements ICThread, IRestart, IResum IStackFrame[] frames = getStackFrames(); if ( frames.length == 0 ) return; - final IStackFrame f = frames[0]; + final CStackFrame f = (CStackFrame)frames[0]; final CDebugElementState oldState = getState(); setState( CDebugElementState.STEPPING ); DebugPlugin.getDefault().asyncExec( new Runnable() { public void run() { try { - f.stepReturn(); + f.doStepReturn(); } catch( DebugException e ) { setState( oldState );