1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix for bug 214550.

All variable objects are marked out-of-date on a MemoryChangedEvent
This commit is contained in:
Marc Khouzam 2008-02-26 14:37:12 +00:00
parent 8c6342dc6d
commit 398f01e873
2 changed files with 21 additions and 6 deletions

View file

@ -892,7 +892,7 @@ public class ExpressionService extends AbstractDsfService implements IExpression
@DsfServiceEventHandler @DsfServiceEventHandler
public void eventDispatched(IMemoryChangedEvent e) { public void eventDispatched(IMemoryChangedEvent e) {
fExpressionCache.reset(); fExpressionCache.reset();
// We must also deal with our MIVariableManager since it // MIVariableManager separately traps this event
// caches variable values, which may now have changed
} }
} }

View file

@ -33,6 +33,7 @@ import org.eclipse.dd.dsf.debug.service.IStack;
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext; import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext; import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData; import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
import org.eclipse.dd.dsf.debug.service.IMemory.IMemoryChangedEvent;
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext; import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.dd.dsf.debug.service.command.ICommand; import org.eclipse.dd.dsf.debug.service.command.ICommand;
import org.eclipse.dd.dsf.debug.service.command.ICommandControl; import org.eclipse.dd.dsf.debug.service.command.ICommandControl;
@ -1629,20 +1630,34 @@ public class MIVariableManager extends AbstractDsfService implements ICommandCon
return MIPlugin.getBundleContext(); return MIPlugin.getBundleContext();
} }
@DsfServiceEventHandler private void markAllOutOfDate() {
public void eventDispatched(IRunControl.IResumedDMEvent e) {
// Program has resumed, all variable objects need to be updated.
// Since only roots can actually be updated in GDB, we only need
// to deal with those. Also, to optimize this operation, we have
// a list of all roots that have been updated, so we only have to
// set those to needing to be updated.
MIRootVariableObject root; MIRootVariableObject root;
while ((root = updatedRootList.poll()) != null) { while ((root = updatedRootList.poll()) != null) {
root.markAsOutOfDate(); root.markAsOutOfDate();
} }
} }
@DsfServiceEventHandler
public void eventDispatched(IRunControl.IResumedDMEvent e) {
// Program has resumed, all variable objects need to be updated.
// Since only roots can actually be updated in GDB, we only need
// to deal with those. Also, to optimize this operation, we have
// a list of all roots that have been updated, so we only have to
// set those to needing to be updated.
markAllOutOfDate();
}
@DsfServiceEventHandler @DsfServiceEventHandler
public void eventDispatched(IRunControl.ISuspendedDMEvent e) { public void eventDispatched(IRunControl.ISuspendedDMEvent e) {
} }
@DsfServiceEventHandler
public void eventDispatched(IMemoryChangedEvent e) {
// Some memory has changed. We currently do not know the address
// of each of our variable objects, so there is no way to know
// which one is affected. Mark them all as out of date.
// The views will fully refresh on a MemoryChangedEvent
markAllOutOfDate();
}
} }