diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java index e2aec17959e..dd4b8db4f4f 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java @@ -218,4 +218,10 @@ public interface IDisassemblyBackend { * @return the last know address, -1 if unknown */ BigInteger getLastKnownAddress(); + + /** + * Requests that the backend clear any caches that it has so that refresh operations obtain fresh data. + */ + default void clearCaches() { + } } diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java index 90af02becfa..b15e2731a92 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java @@ -25,6 +25,7 @@ import static org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyUtils import java.math.BigInteger; import java.text.MessageFormat; +import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.TimeUnit; @@ -45,6 +46,7 @@ import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.Query; import org.eclipse.cdt.dsf.datamodel.DMContexts; import org.eclipse.cdt.dsf.datamodel.IDMContext; +import org.eclipse.cdt.dsf.debug.service.ICachingService; import org.eclipse.cdt.dsf.debug.service.IDisassembly; import org.eclipse.cdt.dsf.debug.service.IDisassembly.IDisassemblyDMContext; import org.eclipse.cdt.dsf.debug.service.IDisassembly2; @@ -1307,4 +1309,23 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements protected void handleError(IStatus status) { DsfUIPlugin.log(status); } + + @Override + public void clearCaches() { + final DsfExecutor executor = getSession().getExecutor(); + executor.execute(new DsfRunnable() { + @Override + public void run() { + List.of(IStack.class, IDisassembly.class, IExpressions.class, IRunControl.class, IRegisters.class, + ISourceLookup.class).forEach((clazz) -> { + Object o = getService(clazz); + if (o instanceof ICachingService) { + ICachingService cs = (ICachingService) o; + cs.flushCache(getExecutionDMContext()); + } + }); + } + }); + + } } diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java index 5f0fcdf2a68..58e1072791b 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java @@ -3277,9 +3277,9 @@ public abstract class DisassemblyPart extends WorkbenchPart @Override public void refresh() { + fBackend.clearCaches(); asyncExec(() -> { - fPCLastAddress = getTopAddress(); - refreshView(10); + updatePC(PC_UNKNOWN); }); } }