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

[214384] - [debug view] When a program runs to completion, the debug target still shows it as running.

This commit is contained in:
Pawel Piech 2008-05-02 23:44:27 +00:00
parent 3a557eade1
commit 6d882f8fb7
2 changed files with 24 additions and 22 deletions

View file

@ -32,10 +32,9 @@ import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl.GDBProcessD
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControlDMContext; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControlDMContext;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl.GDBStartedEvent; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl.GDBStartedEvent;
import org.eclipse.dd.mi.service.command.AbstractMIControl; import org.eclipse.dd.mi.service.command.MIInferiorProcess;
import org.eclipse.dd.mi.service.command.MIControlDMContext; import org.eclipse.dd.mi.service.command.MIInferiorProcess.InferiorExitedDMEvent;
import org.eclipse.dd.mi.service.command.events.MIInferiorExitEvent; import org.eclipse.dd.mi.service.command.MIInferiorProcess.InferiorStartedDMEvent;
import org.eclipse.dd.mi.service.command.events.MIInferiorSignalExitEvent;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
@ -43,26 +42,29 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class ContainerVMNode extends AbstractDMVMNode public class ContainerVMNode extends AbstractDMVMNode
implements IElementLabelProvider implements IElementLabelProvider
{ {
public ContainerVMNode(AbstractDMVMProvider provider, DsfSession session) { public ContainerVMNode(AbstractDMVMProvider provider, DsfSession session) {
super(provider, session, IRunControl.IExecutionDMContext.class); super(provider, session, IRunControl.IExecutionDMContext.class);
} }
@Override @Override
protected void updateElementsInSessionThread(IChildrenUpdate update) { protected void updateElementsInSessionThread(IChildrenUpdate update) {
GDBControl controlService = getServicesTracker().getService(GDBControl.class);
AbstractMIControl controlService = getServicesTracker().getService(AbstractMIControl.class);
if ( controlService == null ) { if ( controlService == null ) {
handleFailedUpdate(update); handleFailedUpdate(update);
return; return;
} }
MIControlDMContext containerCtx = controlService.getControlDMContext(); MIInferiorProcess inferiorProcess = controlService.getInferiorProcess();
update.setChild(createVMContext(containerCtx), 0); if (inferiorProcess != null && inferiorProcess.getState() != MIInferiorProcess.State.TERMINATED) {
update.setChild(createVMContext(inferiorProcess.getExecutionContext()), 0);
}
update.done(); update.done();
} }
@ -121,14 +123,12 @@ public class ContainerVMNode extends AbstractDMVMNode
e instanceof IRunControl.IContainerSuspendedDMEvent) e instanceof IRunControl.IContainerSuspendedDMEvent)
{ {
return IModelDelta.CONTENT; return IModelDelta.CONTENT;
} else if (e instanceof GDBControl.GDBExitedEvent || } else if (e instanceof GDBControl.GDBExitedEvent || e instanceof InferiorExitedDMEvent) {
e instanceof MIInferiorExitEvent ||
e instanceof MIInferiorSignalExitEvent)
{
return IModelDelta.CONTENT; return IModelDelta.CONTENT;
} } else if (e instanceof GDBStartedEvent) {
if (e instanceof GDBStartedEvent) { return IModelDelta.EXPAND;
return IModelDelta.EXPAND | IModelDelta.SELECT; } else if (e instanceof InferiorStartedDMEvent) {
return IModelDelta.EXPAND | IModelDelta.SELECT;
} }
return IModelDelta.NO_CHANGE; return IModelDelta.NO_CHANGE;
} }
@ -144,13 +144,11 @@ public class ContainerVMNode extends AbstractDMVMNode
if (containerCtx != null) { if (containerCtx != null) {
parentDelta.addNode(createVMContext(containerCtx), IModelDelta.CONTENT); parentDelta.addNode(createVMContext(containerCtx), IModelDelta.CONTENT);
} }
} else if (e instanceof GDBControl.GDBExitedEvent || } else if (e instanceof GDBControl.GDBExitedEvent || e instanceof InferiorExitedDMEvent) {
e instanceof MIInferiorExitEvent || parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
e instanceof MIInferiorSignalExitEvent) } else if (e instanceof GDBStartedEvent) {
{ parentDelta.addNode(createVMContext(((IDMEvent<?>)e).getDMContext()), IModelDelta.EXPAND);
parentDelta.addNode(createVMContext(((IDMEvent<?>)e).getDMContext()), IModelDelta.CONTENT); } else if (e instanceof InferiorStartedDMEvent) {
}
if (e instanceof GDBStartedEvent) {
parentDelta.addNode(createVMContext(((IDMEvent<?>)e).getDMContext()), IModelDelta.EXPAND | IModelDelta.SELECT); parentDelta.addNode(createVMContext(((IDMEvent<?>)e).getDMContext()), IModelDelta.EXPAND | IModelDelta.SELECT);
} }

View file

@ -392,6 +392,10 @@ public class MIInferiorProcess extends Process
public State getState() { public State getState() {
return fState; return fState;
} }
public IExecutionDMContext getExecutionContext() {
return fExecutionDMContext;
}
synchronized void setState(State state) { synchronized void setState(State state) {
if (fState == State.TERMINATED) return; if (fState == State.TERMINATED) return;