mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-05 07:15:39 +02:00
Process Suspended Event.
This commit is contained in:
parent
c5881820fa
commit
760848d439
1 changed files with 73 additions and 25 deletions
|
@ -7,23 +7,25 @@ package org.eclipse.cdt.debug.mi.core.cdi;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.CDIException;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDIEventManager;
|
||||
import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
|
||||
import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIExitEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MISteppingRangeEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent;
|
||||
|
||||
/**
|
||||
|
@ -40,40 +42,35 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
|
|||
CSession session = getCSession();
|
||||
ICDIEvent cdiEvent = null;
|
||||
|
||||
if (miEvent instanceof MIBreakpointEvent) {
|
||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
||||
} else if (miEvent instanceof MIFunctionFinishedEvent) {
|
||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
||||
} else if (miEvent instanceof MILocationReachedEvent) {
|
||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
||||
} else if (miEvent instanceof MISignalEvent) {
|
||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
||||
} else if (miEvent instanceof MISteppingRangeEvent) {
|
||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
||||
} else if (miEvent instanceof MIWatchpointEvent) {
|
||||
if ((miEvent instanceof MIBreakpointEvent) ||
|
||||
(miEvent instanceof MIFunctionFinishedEvent) ||
|
||||
(miEvent instanceof MILocationReachedEvent) ||
|
||||
(miEvent instanceof MISignalEvent) ||
|
||||
(miEvent instanceof MISteppingRangeEvent) ||
|
||||
(miEvent instanceof MIWatchpointEvent)) {
|
||||
processSuspendedEvent(miEvent);
|
||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
||||
} else if (miEvent instanceof MIRunningEvent) {
|
||||
cdiEvent = new ResumedEvent(session, (MIRunningEvent)miEvent);
|
||||
} else if (miEvent instanceof MIVarChangedEvent) {
|
||||
MIVarChangedEvent eventChanged = (MIVarChangedEvent)miEvent;
|
||||
if (eventChanged.isInScope()) {
|
||||
cdiEvent = new ChangedEvent(session, (MIVarChangedEvent)miEvent);
|
||||
} else {
|
||||
cdiEvent = new DestroyedEvent(session, (MIVarChangedEvent)miEvent);
|
||||
}
|
||||
} else if (miEvent instanceof MIThreadExitEvent) {
|
||||
cdiEvent = new DestroyedEvent(session,(MIThreadExitEvent)miEvent);
|
||||
} else if (miEvent instanceof MIInferiorExitEvent) {
|
||||
cdiEvent = new ExitedEvent(session, (MIInferiorExitEvent)miEvent);
|
||||
} else if (miEvent instanceof MIExitEvent) {
|
||||
cdiEvent = new DestroyedEvent(session, null);
|
||||
} else if (miEvent instanceof MIGDBExitEvent) {
|
||||
cdiEvent = new DestroyedEvent(session);
|
||||
}
|
||||
|
||||
// Fire the event;
|
||||
fireEvent(cdiEvent);
|
||||
}
|
||||
|
||||
public void fireEvent(ICDIEvent cdiEvent) {
|
||||
if (cdiEvent != null) {
|
||||
ICDIEventListener[] listeners =
|
||||
(ICDIEventListener[])list.toArray(new ICDIEventListener[0]);
|
||||
for (int i = 0; i < listeners.length; i++) {
|
||||
listeners[i].handleDebugEvent(cdiEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public EventManager(CSession session) {
|
||||
super(session);
|
||||
}
|
||||
|
@ -91,4 +88,55 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
|
|||
public void removeEventListener(ICDIEventListener listener) {
|
||||
list.remove(listener);
|
||||
}
|
||||
|
||||
private void fireEvent(ICDIEvent cdiEvent) {
|
||||
if (cdiEvent != null) {
|
||||
ICDIEventListener[] listeners =
|
||||
(ICDIEventListener[])list.toArray(new ICDIEventListener[0]);
|
||||
for (int i = 0; i < listeners.length; i++) {
|
||||
listeners[i].handleDebugEvent(cdiEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* When suspended arrives, reset managers and target.
|
||||
*/
|
||||
void processSuspendedEvent(MIEvent event) {
|
||||
int threadId = 0;
|
||||
CTarget target = getCSession().getCTarget();
|
||||
// Set the current thread.
|
||||
if (event instanceof MIBreakpointEvent) {
|
||||
MIBreakpointEvent breakEvent = (MIBreakpointEvent) event;
|
||||
threadId = breakEvent.getThreadId();
|
||||
} else if (event instanceof MIWatchpointEvent) {
|
||||
MIWatchpointEvent watchEvent = (MIWatchpointEvent) event;
|
||||
threadId = watchEvent.getThreadId();
|
||||
} else if (event instanceof MISteppingRangeEvent) {
|
||||
MISteppingRangeEvent rangeEvent = (MISteppingRangeEvent) event;
|
||||
threadId = rangeEvent.getThreadId();
|
||||
} else if (event instanceof MISignalEvent) {
|
||||
MISignalEvent sigEvent = (MISignalEvent) event;
|
||||
threadId = sigEvent.getThreadId();
|
||||
} else if (event instanceof MILocationReachedEvent) {
|
||||
MILocationReachedEvent locEvent = (MILocationReachedEvent) event;
|
||||
threadId = locEvent.getThreadId();
|
||||
} else if (event instanceof MIFunctionFinishedEvent) {
|
||||
MIFunctionFinishedEvent funcEvent = (MIFunctionFinishedEvent) event;
|
||||
threadId = funcEvent.getThreadId();
|
||||
}
|
||||
target.updateState(threadId);
|
||||
|
||||
VariableManager varMgr = getCSession().getVariableManager();
|
||||
try {
|
||||
varMgr.update();
|
||||
} catch (CDIException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
|
||||
void processRunningEvent() {
|
||||
CTarget target = getCSession().getCTarget();
|
||||
//target.clearState();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue