mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 383344 - Stored memory monitors don't show data in subsequent
sessions Change-Id: I2621c97c57d2f2e1393144e8bcc551adbdad031e
This commit is contained in:
parent
ba17c7ac64
commit
4b834ede87
2 changed files with 45 additions and 18 deletions
|
@ -24,16 +24,23 @@ import org.eclipse.cdt.dsf.debug.model.DsfMemoryBlock;
|
||||||
import org.eclipse.cdt.dsf.debug.model.DsfMemoryBlockRetrieval;
|
import org.eclipse.cdt.dsf.debug.model.DsfMemoryBlockRetrieval;
|
||||||
import org.eclipse.cdt.dsf.debug.service.IMemory.IMemoryDMContext;
|
import org.eclipse.cdt.dsf.debug.service.IMemory.IMemoryDMContext;
|
||||||
import org.eclipse.cdt.dsf.debug.service.IMemorySpaces;
|
import org.eclipse.cdt.dsf.debug.service.IMemorySpaces;
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.IRunControl.IExitedDMEvent;
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.IRunControl.IStartedDMEvent;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServices;
|
import org.eclipse.cdt.dsf.service.DsfServices;
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
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.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
import org.eclipse.debug.core.IMemoryBlockManager;
|
||||||
import org.eclipse.debug.core.model.IMemoryBlock;
|
import org.eclipse.debug.core.model.IMemoryBlock;
|
||||||
import org.eclipse.debug.core.model.IMemoryBlockExtension;
|
import org.eclipse.debug.core.model.IMemoryBlockExtension;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
|
@ -381,4 +388,35 @@ public class GdbMemoryBlockRetrieval extends DsfMemoryBlockRetrieval implements
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DsfServiceEventHandler
|
||||||
|
public void eventDispatched(IStartedDMEvent event) {
|
||||||
|
if (event.getDMContext() instanceof IContainerDMContext) {
|
||||||
|
IMemoryDMContext memoryDmc = DMContexts.getAncestorOfType(event.getDMContext(), IMemoryDMContext.class);
|
||||||
|
if (memoryDmc != null) {
|
||||||
|
initialize(memoryDmc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@DsfServiceEventHandler
|
||||||
|
public void eventDispatched(IExitedDMEvent event) {
|
||||||
|
if (event.getDMContext() instanceof IContainerDMContext) {
|
||||||
|
IMemoryDMContext memoryDmc = DMContexts.getAncestorOfType(event.getDMContext(), IMemoryDMContext.class);
|
||||||
|
if (memoryDmc != null) {
|
||||||
|
saveMemoryBlocks();
|
||||||
|
Job removeJob = new Job("Removing memory blocks") { //$NON-NLS-1$
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected IStatus run( IProgressMonitor monitor ) {
|
||||||
|
IMemoryBlockManager mbm = DebugPlugin.getDefault().getMemoryBlockManager();
|
||||||
|
IMemoryBlock[] deletedMemoryBlocks = mbm.getMemoryBlocks(GdbMemoryBlockRetrieval.this);
|
||||||
|
mbm.removeMemoryBlocks(deletedMemoryBlocks);
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
removeJob.schedule();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,16 +32,11 @@ import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
|
||||||
import org.eclipse.cdt.dsf.debug.model.DsfLaunch;
|
import org.eclipse.cdt.dsf.debug.model.DsfLaunch;
|
||||||
import org.eclipse.cdt.dsf.debug.model.DsfMemoryBlockRetrieval;
|
import org.eclipse.cdt.dsf.debug.model.DsfMemoryBlockRetrieval;
|
||||||
import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory;
|
import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory;
|
||||||
import org.eclipse.cdt.dsf.debug.service.IMemory.IMemoryDMContext;
|
|
||||||
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
|
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlShutdownDMEvent;
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlShutdownDMEvent;
|
||||||
import org.eclipse.cdt.dsf.gdb.IGdbDebugConstants;
|
import org.eclipse.cdt.dsf.gdb.IGdbDebugConstants;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.memory.GdbMemoryBlockRetrieval;
|
import org.eclipse.cdt.dsf.gdb.internal.memory.GdbMemoryBlockRetrieval;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
||||||
import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
|
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIProcesses;
|
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess;
|
import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
|
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
||||||
|
@ -132,17 +127,10 @@ public class GdbLaunch extends DsfLaunch
|
||||||
fExecutor.submit( new Callable<Object>() {
|
fExecutor.submit( new Callable<Object>() {
|
||||||
@Override
|
@Override
|
||||||
public Object call() throws CoreException {
|
public Object call() throws CoreException {
|
||||||
ICommandControlService commandControl = fTracker.getService(ICommandControlService.class);
|
fMemRetrieval = new GdbMemoryBlockRetrieval(
|
||||||
IMIProcesses procService = fTracker.getService(IMIProcesses.class);
|
GdbLaunchDelegate.GDB_DEBUG_MODEL_ID, getLaunchConfiguration(), fSession);
|
||||||
if (commandControl != null && procService != null) {
|
fSession.registerModelAdapter(IMemoryBlockRetrieval.class, fMemRetrieval);
|
||||||
fMemRetrieval = new GdbMemoryBlockRetrieval(
|
fSession.addServiceEventListener(fMemRetrieval, null);
|
||||||
GdbLaunchDelegate.GDB_DEBUG_MODEL_ID, getLaunchConfiguration(), fSession);
|
|
||||||
fSession.registerModelAdapter(IMemoryBlockRetrieval.class, fMemRetrieval);
|
|
||||||
|
|
||||||
IProcessDMContext procDmc = procService.createProcessContext(commandControl.getContext(), MIProcesses.UNKNOWN_PROCESS_ID);
|
|
||||||
IMemoryDMContext memoryDmc = (IMemoryDMContext)procService.createContainerContext(procDmc, MIProcesses.UNIQUE_GROUP_ID);
|
|
||||||
fMemRetrieval.initialize(memoryDmc);
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}).get();
|
}).get();
|
||||||
|
@ -253,6 +241,9 @@ public class GdbLaunch extends DsfLaunch
|
||||||
new RequestMonitor(fSession.getExecutor(), rm) {
|
new RequestMonitor(fSession.getExecutor(), rm) {
|
||||||
@Override
|
@Override
|
||||||
public void handleCompleted() {
|
public void handleCompleted() {
|
||||||
|
if (fMemRetrieval != null)
|
||||||
|
fSession.removeServiceEventListener(fMemRetrieval);
|
||||||
|
|
||||||
fSession.removeServiceEventListener(GdbLaunch.this);
|
fSession.removeServiceEventListener(GdbLaunch.this);
|
||||||
if (!isSuccess()) {
|
if (!isSuccess()) {
|
||||||
GdbPlugin.getDefault().getLog().log(new MultiStatus(
|
GdbPlugin.getDefault().getLog().log(new MultiStatus(
|
||||||
|
@ -268,8 +259,6 @@ public class GdbLaunch extends DsfLaunch
|
||||||
// launch with an invalid gdbserver
|
// launch with an invalid gdbserver
|
||||||
// Bug 368597
|
// Bug 368597
|
||||||
if (fMemRetrieval != null) {
|
if (fMemRetrieval != null) {
|
||||||
// DsfMemoryBlockRetrieval.saveMemoryBlocks();
|
|
||||||
fMemRetrieval.saveMemoryBlocks();
|
|
||||||
|
|
||||||
// Fire a terminate event for the memory retrieval object so
|
// Fire a terminate event for the memory retrieval object so
|
||||||
// that the hosting memory views can clean up. See 255120 and
|
// that the hosting memory views can clean up. See 255120 and
|
||||||
|
|
Loading…
Add table
Reference in a new issue