mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-11 02:05:39 +02:00
Set the corresponding thread as current before switching to another frame.
This commit is contained in:
parent
271c58700c
commit
42ab22b236
5 changed files with 49 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2002-10-14 Mikhail Khodjaiants
|
||||||
|
* ISwitchToThread.java: New method to get the current thread.
|
||||||
|
* CDebugTarget.java: Implemented the 'getCurrentThread' method of the 'ISwitchToThread' interface.
|
||||||
|
* CDebugTarget.java: Fix in the 'setCurrentThread' method.
|
||||||
|
|
||||||
2002-10-12 Alain Magloire
|
2002-10-12 Alain Magloire
|
||||||
|
|
||||||
* core/cdi/model/ICDIMemoryBlock (supportValueModification):
|
* core/cdi/model/ICDIMemoryBlock (supportValueModification):
|
||||||
|
|
|
@ -16,5 +16,6 @@ import org.eclipse.debug.core.model.IThread;
|
||||||
*/
|
*/
|
||||||
public interface ISwitchToThread
|
public interface ISwitchToThread
|
||||||
{
|
{
|
||||||
|
IThread getCurrentThread() throws DebugException;
|
||||||
void setCurrentThread( IThread thread ) throws DebugException;
|
void setCurrentThread( IThread thread ) throws DebugException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1798,6 +1798,7 @@ public class CDebugTarget extends CDebugElement
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
getCDITarget().setCurrentThread( ((CThread)thread).getCDIThread() );
|
getCDITarget().setCurrentThread( ((CThread)thread).getCDIThread() );
|
||||||
|
((CThread)thread).setCurrent( true );
|
||||||
}
|
}
|
||||||
catch( CDIException e )
|
catch( CDIException e )
|
||||||
{
|
{
|
||||||
|
@ -1805,6 +1806,20 @@ public class CDebugTarget extends CDebugElement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.eclipse.cdt.debug.core.ISwitchToThread#getCurrentThread()
|
||||||
|
*/
|
||||||
|
public IThread getCurrentThread() throws DebugException
|
||||||
|
{
|
||||||
|
IThread[] threads = getThreads();
|
||||||
|
for ( int i = 0; i < threads.length; ++i )
|
||||||
|
{
|
||||||
|
if ( ((CThread)threads[i]).isCurrent() )
|
||||||
|
return threads[i];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
protected ISourceLocator getSourceLocator()
|
protected ISourceLocator getSourceLocator()
|
||||||
{
|
{
|
||||||
return getLaunch().getSourceLocator();
|
return getLaunch().getSourceLocator();
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
2002-10-14 Mikhail Khodjaiants
|
||||||
|
* CDebugUIPlugin.java: In the 'selectionChanged' method check if the thread of the new frame is current. If not make it current.
|
||||||
|
|
||||||
2002-10-11 Mikhail Khodjaiants
|
2002-10-11 Mikhail Khodjaiants
|
||||||
* SwitchToDisassemblyActionDelegate.java: Implementation of the 'Switch to disassembly mode' action.
|
* SwitchToDisassemblyActionDelegate.java: Implementation of the 'Switch to disassembly mode' action.
|
||||||
* plugin.properties: Action label and tooltip.
|
* plugin.properties: Action label and tooltip.
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.eclipse.debug.core.DebugEvent;
|
||||||
import org.eclipse.debug.core.DebugException;
|
import org.eclipse.debug.core.DebugException;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
import org.eclipse.debug.core.IDebugEventSetListener;
|
import org.eclipse.debug.core.IDebugEventSetListener;
|
||||||
|
import org.eclipse.debug.core.model.IDebugElement;
|
||||||
import org.eclipse.debug.core.model.IDebugTarget;
|
import org.eclipse.debug.core.model.IDebugTarget;
|
||||||
import org.eclipse.debug.core.model.IStackFrame;
|
import org.eclipse.debug.core.model.IStackFrame;
|
||||||
import org.eclipse.debug.core.model.IThread;
|
import org.eclipse.debug.core.model.IThread;
|
||||||
|
@ -364,9 +365,12 @@ public class CDebugUIPlugin extends AbstractUIPlugin implements ISelectionListen
|
||||||
if ( ((IThread)element).getDebugTarget() instanceof ISwitchToThread )
|
if ( ((IThread)element).getDebugTarget() instanceof ISwitchToThread )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
{
|
||||||
|
if ( !sameThread( (IDebugElement)element ) )
|
||||||
{
|
{
|
||||||
((ISwitchToThread)((IThread)element).getDebugTarget()).setCurrentThread( (IThread)element );
|
((ISwitchToThread)((IThread)element).getDebugTarget()).setCurrentThread( (IThread)element );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch( DebugException e )
|
catch( DebugException e )
|
||||||
{
|
{
|
||||||
errorDialog( e.getMessage(), e );
|
errorDialog( e.getMessage(), e );
|
||||||
|
@ -379,6 +383,10 @@ public class CDebugUIPlugin extends AbstractUIPlugin implements ISelectionListen
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if ( !sameThread( (IDebugElement)element ) )
|
||||||
|
{
|
||||||
|
((ISwitchToThread)((IStackFrame)element).getDebugTarget()).setCurrentThread( ((IStackFrame)element).getThread() );
|
||||||
|
}
|
||||||
((ISwitchToFrame)((IStackFrame)element).getThread()).switchToFrame( (IStackFrame)element );
|
((ISwitchToFrame)((IStackFrame)element).getThread()).switchToFrame( (IStackFrame)element );
|
||||||
}
|
}
|
||||||
catch( DebugException e )
|
catch( DebugException e )
|
||||||
|
@ -462,4 +470,20 @@ public class CDebugUIPlugin extends AbstractUIPlugin implements ISelectionListen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean sameThread( IDebugElement element ) throws DebugException
|
||||||
|
{
|
||||||
|
if ( element.getDebugTarget() instanceof ISwitchToThread )
|
||||||
|
{
|
||||||
|
if ( element instanceof IThread )
|
||||||
|
{
|
||||||
|
return ((IThread)element).equals( ((ISwitchToThread)element.getDebugTarget()).getCurrentThread() );
|
||||||
|
}
|
||||||
|
if ( element instanceof IStackFrame )
|
||||||
|
{
|
||||||
|
return ((IStackFrame)element).getThread().equals( ((ISwitchToThread)element.getDebugTarget()).getCurrentThread() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue