mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-05 23:35:48 +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.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
import java.util.Observer;
|
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.ICDIEventManager;
|
||||||
import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
|
import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
|
||||||
import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
|
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.MIBreakpointEvent;
|
||||||
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
|
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.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.MIInferiorExitEvent;
|
||||||
import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
|
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.MIRunningEvent;
|
||||||
import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
|
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.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;
|
import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,40 +42,35 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
|
||||||
CSession session = getCSession();
|
CSession session = getCSession();
|
||||||
ICDIEvent cdiEvent = null;
|
ICDIEvent cdiEvent = null;
|
||||||
|
|
||||||
if (miEvent instanceof MIBreakpointEvent) {
|
if ((miEvent instanceof MIBreakpointEvent) ||
|
||||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
(miEvent instanceof MIFunctionFinishedEvent) ||
|
||||||
} else if (miEvent instanceof MIFunctionFinishedEvent) {
|
(miEvent instanceof MILocationReachedEvent) ||
|
||||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
(miEvent instanceof MISignalEvent) ||
|
||||||
} else if (miEvent instanceof MILocationReachedEvent) {
|
(miEvent instanceof MISteppingRangeEvent) ||
|
||||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
(miEvent instanceof MIWatchpointEvent)) {
|
||||||
} else if (miEvent instanceof MISignalEvent) {
|
processSuspendedEvent(miEvent);
|
||||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
|
||||||
} else if (miEvent instanceof MISteppingRangeEvent) {
|
|
||||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
|
||||||
} else if (miEvent instanceof MIWatchpointEvent) {
|
|
||||||
cdiEvent = new SuspendedEvent(session, miEvent);
|
cdiEvent = new SuspendedEvent(session, miEvent);
|
||||||
} else if (miEvent instanceof MIRunningEvent) {
|
} else if (miEvent instanceof MIRunningEvent) {
|
||||||
cdiEvent = new ResumedEvent(session, (MIRunningEvent)miEvent);
|
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) {
|
} else if (miEvent instanceof MIInferiorExitEvent) {
|
||||||
cdiEvent = new ExitedEvent(session, (MIInferiorExitEvent)miEvent);
|
cdiEvent = new ExitedEvent(session, (MIInferiorExitEvent)miEvent);
|
||||||
} else if (miEvent instanceof MIExitEvent) {
|
} else if (miEvent instanceof MIGDBExitEvent) {
|
||||||
cdiEvent = new DestroyedEvent(session, null);
|
cdiEvent = new DestroyedEvent(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire the event;
|
// Fire the event;
|
||||||
fireEvent(cdiEvent);
|
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) {
|
public EventManager(CSession session) {
|
||||||
super(session);
|
super(session);
|
||||||
}
|
}
|
||||||
|
@ -91,4 +88,55 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
|
||||||
public void removeEventListener(ICDIEventListener listener) {
|
public void removeEventListener(ICDIEventListener listener) {
|
||||||
list.remove(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