From 099c9906e8f8fbf2fdf9fd0be591281d67eec438 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Thu, 10 Oct 2002 22:16:14 +0000 Subject: [PATCH] Check if the selected frame is current before calling 'setCurrentStackFrame'. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 3 +++ .../debug/internal/core/model/CThread.java | 23 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index e5fcf902397..36c4f358b91 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,6 @@ +2002-10-10 Mikhail Khodjaiants + * CThread.java: Check if the selected frame is current before calling 'setCurrentStackFrame'. + 2002-10-10 Mikhail Khodjaiants * CStackFrame.java: Added Getter and Setter for 'fRefreshVariables'. 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 9de18d0dbb3..4750cccda9b 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 @@ -93,7 +93,9 @@ public class CThread extends CDebugElement /** * Whether this thread is current. */ - private boolean fIsCurrent = false; + private boolean fIsCurrent = false; + + private CStackFrame fLastStackFrame = null; /** * Constructor for CThread. @@ -826,6 +828,7 @@ public class CThread extends CDebugElement private void handleResumedEvent( ICDIResumedEvent event ) { setRunning( true ); + setLastStackFrame( null ); int state = IState.RUNNING; int detail = DebugEvent.UNSPECIFIED; if ( isCurrent() ) @@ -974,14 +977,18 @@ public class CThread extends CDebugElement */ public void switchToFrame( IStackFrame frame ) throws DebugException { - if ( frame == null && !(frame instanceof CStackFrame) ) + if ( frame == null || !(frame instanceof CStackFrame) || frame.equals( getLastStackFrame() ) ) { return; } // ((CDebugTarget)getDebugTarget()).resetRegisters(); try { - getCDIThread().setCurrentStackFrame( ((CStackFrame)frame).getCDIStackFrame() ); + if ( getLastStackFrame() != null ) + { + getCDIThread().setCurrentStackFrame( ((CStackFrame)frame).getCDIStackFrame() ); + } + setLastStackFrame( (CStackFrame)frame ); } catch( CDIException e ) { @@ -993,4 +1000,14 @@ public class CThread extends CDebugElement { return ((CDebugTarget)getDebugTarget()).getRealSourceMode(); } + + private void setLastStackFrame( CStackFrame frame ) + { + fLastStackFrame = frame; + } + + private CStackFrame getLastStackFrame() + { + return fLastStackFrame; + } }