[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] GDB/MI recognise CLI
|
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.52
diff -u -r1.52 ChangeLog
--- ChangeLog 7 Jan 2003 17:12:33 -0000 1.52
+++ ChangeLog 8 Jan 2003 15:39:45 -0000
@@ -1,3 +1,40 @@
+2003-01-08 Alain Magloire
+
+ CLIProcessor a new class to recognise the CLI(Command Line Interface)
+ of gdb example:
+ (gdb) next
+ (gdb) n
+ (gdb) b
+ (gdb) break
+ etc ..:
+ When the patterns are discover, the class will generate some events
+ to warn te UI that something change.
+
+ * src/.../mi/core/cdi/BreakpointManager.java (update):
+ Send a -break-list and generate events for any difference, in
+ the breakpoints that we know about.
+ (deleteBreakpoint): Take as argument the breakpoint number.
+ (getBreakpoints): Call update() to generate events if new breakpoints.
+ (getMIBreakpoints): return the MIBreakpoints.
+ * src/.../mi/core/cdi/ChangedEvent.java (ChangedEvent):
+ New constructor with MIBreakPointChangedEvent.
+ * src/.../mi/core/cdi/DestroyedEvent.java (DestroyedEvent):
+ New constructor with MIBreakPointDeletedEvent.
+ * src/.../mi/core/cdi/Created.java: New file.
+ * src/.../mi/core/cdi/EventManager.java (update):
+ Watch for the new MIBreakPoint*Events.
+ * src/.../mi/core/event/MIBreakPointCreatedEvent.java: New file.
+ * src/.../mi/core/event/MIBreakPointChangedEvent.java: New file.
+ * src/.../mi/core/event/MIBreakPointDeletedEvent.java: New file.
+ * src/.../mi/core/event/MICreatedEvent.java: New file.
+ * src/.../mi/core/event/MIDestroyedEvent.java: New file.
+ * src/.../mi/core/event/MIInferiorExitEvent.java: Extends MIDestroyedEvent
+ * src/.../mi/core/event/MIThreadExitEvent.java: Extends MIDestroyedEvent
+ * src/.../mi/core/event/MIGDBExitEvent.java: Extends MIDestroyedEvent
+ * src/.../mi/core/event/MIDetachedEvent.java: Extends MIDestroyedEvent
+ * src/.../mi/core/CLIProcessor.java: New file.
+ * src/.../mi/core/TxThread.java: New file.
+
2003-01-07 Alain Magloire
* src/.../mi/core/MIInferior.java (getOutputStream): Remove useless assignement.
Index: src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java
diff -N src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java 8 Jan 2003 15:39:45 -0000
@@ -0,0 +1,113 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+
+package org.eclipse.cdt.debug.mi.core;
+
+import org.eclipse.cdt.debug.mi.core.command.CLICommand;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
+
+/**
+ * Transmission command thread blocks on the command Queue
+ * and wake cmd are available and push them to gdb out channel.
+ */
+public class CLIProcessor {
+
+ MISession session;
+
+ public CLIProcessor(MISession s) {
+ session = s;
+ }
+
+ /**
+ * An attempt to discover the command type and
+ * fire an event if necessary.
+ */
+ void process(CLICommand cmd) {
+ String operation = cmd.getOperation().trim();
+ // Get the command name.
+ int indx = operation.indexOf(' ');
+ if (indx != -1) {
+ operation = operation.substring(0, indx).trim();
+ } else {
+ operation = operation.trim();
+ }
+
+ // Check the type of command
+
+ int type = getSteppingOperationKind(operation);
+ if (type != -1) {
+ // if it was a step instruction set state running
+ session.getMIInferior().setRunning();
+ MIEvent event = new MIRunningEvent(cmd.getToken(), type);
+ session.fireEvent(event);
+ } else if (isSettingBreakpoint(operation)) {
+ session.fireEvent(new MIBreakPointChangedEvent(0));
+ } else if (isSettingWatchpoint(operation)) {
+ } else if (isDeletingBreakpoint(operation)) {
+ }
+ }
+
+ int getSteppingOperationKind(String operation) {
+ int type = -1;
+ /* execution commands: n, next, s, step, si, stepi, u, until, finish,
+ c, continue, fg */
+ if (operation.equals("n") || operation.equals("next")) {
+ type = MIRunningEvent.NEXT;
+ } else if (operation.equals("ni") || operation.equals("nexti")) {
+ type = MIRunningEvent.NEXTI;
+ } else if (operation.equals("s") || operation.equals("step")) {
+ type = MIRunningEvent.STEP;
+ } else if (operation.equals("si") || operation.equals("stepi")) {
+ type = MIRunningEvent.STEPI;
+ } else if (operation.equals("u") ||
+ (operation.startsWith("unt") && "until".indexOf(operation) != -1)) {
+ type = MIRunningEvent.UNTIL;
+ } else if (operation.startsWith("fin") && "finish".indexOf(operation) != -1) {
+ type = MIRunningEvent.FINISH;
+ } else if (operation.equals("c") || operation.equals("fg") ||
+ (operation.startsWith("cont") && "continue".indexOf(operation) != -1)) {
+ type = MIRunningEvent.CONTINUE;
+ }
+ return type;
+ }
+
+ boolean isSettingBreakpoint(String operation) {
+ boolean isbreak = false;
+ /* breakpoints: b, break, hbreak, tbreak, rbreak, thbreak */
+ /* watchpoints: watch, rwatch, awatch, tbreak, rbreak, thbreak */
+ if ((operation.startsWith("b") && "break".indexOf(operation) != -1) ||
+ (operation.startsWith("tb") && "tbreak".indexOf(operation) != -1) ||
+ (operation.startsWith("hb") && "hbreak".indexOf(operation) != -1) ||
+ (operation.startsWith("thb") && "thbreak".indexOf(operation) != -1) ||
+ (operation.startsWith("rb") && "rbreak".indexOf(operation) != -1)) {
+ isbreak = true;
+ }
+ return isbreak;
+ }
+
+ boolean isSettingWatchpoint(String operation) {
+ boolean isWatch = false;
+ /* watchpoints: watch, rwatch, awatch, tbreak, rbreak, thbreak */
+ if ((operation.startsWith("wa") && "watch".indexOf(operation) != -1) ||
+ (operation.startsWith("rw") && "rwatch".indexOf(operation) != -1) ||
+ (operation.startsWith("aw") && "awatch".indexOf(operation) != -1)) {
+ isWatch = true;
+ }
+ return isWatch;
+ }
+
+ boolean isDeletingBreakpoint(String operation) {
+ boolean isDelete = false;
+ /* deleting breaks: clear, delete */
+ if ((operation.startsWith("cl") && "clear".indexOf(operation) != -1) ||
+ (operation.startsWith("del") && "delete".indexOf(operation) != -1)) {
+ isDelete = true;
+ }
+ return isDelete;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/TxThread.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/TxThread.java,v
retrieving revision 1.16
diff -u -r1.16 TxThread.java
--- src/org/eclipse/cdt/debug/mi/core/TxThread.java 14 Dec 2002 14:04:40 -0000 1.16
+++ src/org/eclipse/cdt/debug/mi/core/TxThread.java 8 Jan 2003 15:39:46 -0000
@@ -20,10 +20,12 @@
public class TxThread extends Thread {
MISession session;
+ CLIProcessor cli;
public TxThread(MISession s) {
super("MI TX Thread");
session = s;
+ cli = new CLIProcessor(session);
}
public void run () {
@@ -54,7 +56,7 @@
// May need to fire event.
if (cmd instanceof CLICommand) {
- processCLICommand((CLICommand)cmd);
+ cli.process((CLICommand)cmd);
}
// shove in the pipe
Index: src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java,v
retrieving revision 1.23
diff -u -r1.23 BreakpointManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java 6 Jan 2003 16:32:16 -0000 1.23
+++ src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java 8 Jan 2003 15:39:49 -0000
@@ -18,6 +18,7 @@
import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIBreakAfter;
import org.eclipse.cdt.debug.mi.core.command.MIBreakCondition;
@@ -27,6 +28,10 @@
import org.eclipse.cdt.debug.mi.core.command.MIBreakInsert;
import org.eclipse.cdt.debug.mi.core.command.MIBreakList;
import org.eclipse.cdt.debug.mi.core.command.MIBreakWatch;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointDeletedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.output.MIBreakInsertInfo;
import org.eclipse.cdt.debug.mi.core.output.MIBreakListInfo;
import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint;
@@ -39,18 +44,79 @@
public class BreakpointManager extends SessionObject implements ICDIBreakpointManager {
List breakList;
+ List delList;
boolean allowInterrupt;
public BreakpointManager(CSession session) {
super(session);
breakList = new ArrayList(1);
+ delList = new ArrayList(1);
allowInterrupt = true;
}
+ public MIBreakPoint[] getMIBreakpoints() throws CDIException {
+ CSession s = getCSession();
+ CommandFactory factory = s.getMISession().getCommandFactory();
+ MIBreakList breakpointList = factory.createMIBreakList();
+ try {
+ s.getMISession().postCommand(breakpointList);
+ MIBreakListInfo info = breakpointList.getMIBreakListInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ return info.getBreakPoints();
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ }
+
+ void update() throws CDIException {
+ MIBreakPoint[] newMIBreakPoints = getMIBreakpoints();
+ List eventList = new ArrayList(newMIBreakPoints.length);
+ for (int i = 0; i < newMIBreakPoints.length; i++) {
+ int no = newMIBreakPoints[i].getNumber();
+ if (containsBreakpoint(no)) {
+ if (hasBreakpointChanged(newMIBreakPoints[i])) {
+ // Fire ChangedEvent
+ eventList.add(new MIBreakPointChangedEvent(no));
+ }
+ } else {
+ // add the new breakpoint and fire create event
+ breakList.add(new Breakpoint(this, newMIBreakPoints[i]));
+ eventList.add(new MIBreakPointCreatedEvent(no));
+ }
+ }
+ // Check if any breakpoint was removed.
+ Breakpoint[] oldBreakpoints = listBreakpoints();
+ for (int i = 0; i < oldBreakpoints.length; i++) {
+ boolean found = false;
+ int no = oldBreakpoints[i].getMIBreakPoint().getNumber();
+ for (int j = 0; j < newMIBreakPoints.length; j++) {
+ if (no == newMIBreakPoints[i].getNumber()) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ // Fire destroyed Events.
+ breakList.remove(oldBreakpoints[i]);
+ delList.add(oldBreakpoints[i]);
+ eventList.add(new MIBreakPointDeletedEvent(no));
+ }
+ }
+ MISession mi = getCSession().getMISession();
+ MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
+ mi.fireEvents(events);
+ }
+
boolean containsBreakpoint(int number) {
return (getBreakpoint(number) != null);
}
+ boolean hasBreakpointChanged(MIBreakPoint miBreakPoint) {
+ return false;
+ }
+
Breakpoint getBreakpoint(int number) {
ICDIBreakpoint[] bkpts = listBreakpoints();
for (int i = 0; i < bkpts.length; i++) {
@@ -70,8 +136,7 @@
}
Breakpoint[] listBreakpoints() {
- return (Breakpoint[]) breakList.toArray(
- new Breakpoint[breakList.size()]);
+ return (Breakpoint[]) breakList.toArray(new Breakpoint[breakList.size()]);
}
boolean suspendInferior() throws CDIException {
@@ -149,9 +214,29 @@
} finally {
resumeInferior(state);
}
+ List eventList = new ArrayList(breakpoints.length);
for (int i = 0; i < breakpoints.length; i++) {
breakList.remove(breakpoints[i]);
+ delList.add(breakpoints[i]);
+ int no = ((Breakpoint)breakpoints[i]).getMIBreakPoint().getNumber();
+ eventList.add(new MIBreakPointDeletedEvent(no));
+ }
+ MISession mi = s.getMISession();
+ MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
+ mi.fireEvents(events);
+ }
+
+ Breakpoint deleteBreakpoint (int no) {
+ Breakpoint point = null;
+ Breakpoint[] points = (Breakpoint[])delList.toArray(new Breakpoint[delList.size()]);
+ for (int i = 0; i < points.length; i++) {
+ if (points[i].getMIBreakPoint().getNumber() == no) {
+ delList.remove(points[i]);
+ point = points[i];
+ break;
+ }
}
+ return point;
}
public void enableBreakpoint(ICDIBreakpoint breakpoint) throws CDIException {
@@ -258,28 +343,36 @@
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#getBreakpoints()
*/
public ICDIBreakpoint[] getBreakpoints() throws CDIException {
- CSession s = getCSession();
- CommandFactory factory = s.getMISession().getCommandFactory();
- MIBreakList breakpointList = factory.createMIBreakList();
- try {
- s.getMISession().postCommand(breakpointList);
- MIBreakListInfo info = breakpointList.getMIBreakListInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- MIBreakPoint[] miPoints = info.getBreakPoints();
- for (int i = 0; i < miPoints.length; i++) {
- if (!containsBreakpoint(miPoints[i].getNumber())) {
- // FIXME: Generate a Create/Change Event??
- breakList.add(new Breakpoint(this, miPoints[i]));
- }
- }
- // FIXME: Generate a DestroyEvent for deleted ones.
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
+ update();
return (ICDIBreakpoint[]) listBreakpoints();
}
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#getBreakpoints()
+ */
+// public ICDIBreakpoint[] getBreakpoints() throws CDIException {
+// CSession s = getCSession();
+// CommandFactory factory = s.getMISession().getCommandFactory();
+// MIBreakList breakpointList = factory.createMIBreakList();
+// try {
+// s.getMISession().postCommand(breakpointList);
+// MIBreakListInfo info = breakpointList.getMIBreakListInfo();
+// if (info == null) {
+// throw new CDIException("No answer");
+// }
+// MIBreakPoint[] miPoints = info.getBreakPoints();
+// for (int i = 0; i < miPoints.length; i++) {
+// if (!containsBreakpoint(miPoints[i].getNumber())) {
+// // FIXME: Generate a Create/Change Event??
+// breakList.add(new Breakpoint(this, miPoints[i]));
+// }
+// }
+// // FIXME: Generate a DestroyEvent for deleted ones.
+// } catch (MIException e) {
+// throw new MI2CDIException(e);
+// }
+// return (ICDIBreakpoint[]) listBreakpoints();
+// }
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setCatchpoint(int, ICDICatchEvent, String, ICDICondition, boolean)
Index: src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java,v
retrieving revision 1.4
diff -u -r1.4 ChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java 2 Oct 2002 04:47:08 -0000 1.4
+++ src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java 8 Jan 2003 15:39:49 -0000
@@ -6,7 +6,9 @@
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
@@ -40,6 +42,18 @@
}
if (reg != null) {
source = reg;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public ChangedEvent(CSession s, MIBreakPointChangedEvent bpoint) {
+ session = s;
+ BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+ int number = bpoint.getNumber();
+ ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
+ if (breakpoint != null) {
+ source = breakpoint;
} else {
source = new CObject(session.getCTarget());
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java 8 Jan 2003 15:39:49 -0000
@@ -0,0 +1,43 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi;
+
+import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointCreatedEvent;
+
+/**
+ */
+public class CreatedEvent implements ICDICreatedEvent {
+
+ CSession session;
+ ICDIObject source;
+
+ public CreatedEvent(CSession s, MIBreakPointCreatedEvent bpoint) {
+ session = s;
+ BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+ int number = bpoint.getNumber();
+ ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
+ if (breakpoint != null) {
+ source = breakpoint;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public CreatedEvent(CSession s, ICDIObject src) {
+ session = s;
+ source = src;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return source;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java,v
retrieving revision 1.4
diff -u -r1.4 DestroyedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java 5 Dec 2002 16:01:53 -0000 1.4
+++ src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java 8 Jan 2003 15:39:48 -0000
@@ -7,6 +7,7 @@
import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointDeletedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
@@ -32,7 +33,18 @@
} else {
source = new CObject(session.getCTarget());
}
+ }
+ public DestroyedEvent(CSession s, MIBreakPointDeletedEvent bpoint) {
+ session = s;
+ BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+ int number = bpoint.getNumber();
+ Breakpoint breakpoint = mgr.deleteBreakpoint(number);
+ if (breakpoint != null) {
+ source = breakpoint;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
}
public DestroyedEvent(CSession s, ICDIObject src) {
@@ -42,8 +54,7 @@
public DestroyedEvent(CSession s) {
session = s;
- }
-
+ }
/**
* @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
Index: src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java,v
retrieving revision 1.26
diff -u -r1.26 EventManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 7 Jan 2003 17:11:57 -0000 1.26
+++ src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 8 Jan 2003 15:39:50 -0000
@@ -15,7 +15,12 @@
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.MIBreakPointChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointDeletedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MICreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIDestroyedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent;
@@ -76,15 +81,34 @@
blocks[i].setDirty(false);
}
}
+ } else if (miEvent instanceof MIBreakPointChangedEvent) {
+ MIBreakPointChangedEvent bpoint = (MIBreakPointChangedEvent)miEvent;
+ if (bpoint.getNumber() > 0) {
+ cdiList.add(new ChangedEvent(session, (MIBreakPointChangedEvent)miEvent));
+ } else {
+ // Try to update to figure out what have change.
+ try {
+ ((BreakpointManager)(session.getBreakpointManager())).update();
+ } catch (CDIException e) {
+ }
+ }
+ }
+ } else if (miEvent instanceof MIDestroyedEvent) {
+ if (miEvent instanceof MIThreadExitEvent) {
+ cdiList.add(new DestroyedEvent(session,(MIThreadExitEvent)miEvent));
+ } else if (miEvent instanceof MIInferiorExitEvent) {
+ cdiList.add(new ExitedEvent(session, (MIInferiorExitEvent)miEvent));
+ } else if (miEvent instanceof MIGDBExitEvent) {
+ cdiList.add(new DestroyedEvent(session));
+ } else if (miEvent instanceof MIDetachedEvent) {
+ cdiList.add(new DisconnectedEvent(session));
+ } else if (miEvent instanceof MIBreakPointDeletedEvent) {
+ cdiList.add(new DestroyedEvent(session));
+ }
+ } else if (miEvent instanceof MICreatedEvent) {
+ if (miEvent instanceof MIBreakPointCreatedEvent) {
+ cdiList.add(new CreatedEvent(session, (MIBreakPointCreatedEvent)miEvent));
}
- } else if (miEvent instanceof MIThreadExitEvent) {
- cdiList.add(new DestroyedEvent(session,(MIThreadExitEvent)miEvent));
- } else if (miEvent instanceof MIInferiorExitEvent) {
- cdiList.add(new ExitedEvent(session, (MIInferiorExitEvent)miEvent));
- } else if (miEvent instanceof MIGDBExitEvent) {
- cdiList.add(new DestroyedEvent(session));
- } else if (miEvent instanceof MIDetachedEvent) {
- cdiList.add(new DisconnectedEvent(session));
}
// Fire the event;
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java 8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,31 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ *
+ */
+public class MIBreakPointChangedEvent extends MIChangedEvent {
+
+ int no;
+
+ public MIBreakPointChangedEvent(int number) {
+ super(0);
+ no = number;
+ }
+
+ public MIBreakPointChangedEvent(int id, int number) {
+ super(id);
+ no = number;
+ }
+
+ public int getNumber() {
+ return no;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java 8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,31 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ *
+ */
+public class MIBreakPointCreatedEvent extends MICreatedEvent {
+
+ int no;
+
+ public MIBreakPointCreatedEvent(int number) {
+ super(0);
+ no = number;
+ }
+
+ public MIBreakPointCreatedEvent(int id, int number) {
+ super(id);
+ no = number;
+ }
+
+ public int getNumber() {
+ return no;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java 8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,31 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ *
+ */
+public class MIBreakPointDeletedEvent extends MIDestroyedEvent {
+
+ int no;
+
+ public MIBreakPointDeletedEvent(int number) {
+ super(0);
+ no = number;
+ }
+
+ public MIBreakPointDeletedEvent(int id, int number) {
+ super(id);
+ no = number;
+ }
+
+ public int getNumber() {
+ return no;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java 8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,18 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public abstract class MICreatedEvent extends MIEvent {
+ public MICreatedEvent(int id) {
+ super(id);
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java 8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,18 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public abstract class MIDestroyedEvent extends MIEvent {
+ public MIDestroyedEvent(int id) {
+ super(id);
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java,v
retrieving revision 1.3
diff -u -r1.3 MIDetachedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java 26 Oct 2002 20:25:56 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java 8 Jan 2003 15:39:46 -0000
@@ -11,7 +11,7 @@
*
* ^running
*/
-public class MIDetachedEvent extends MIEvent {
+public class MIDetachedEvent extends MIDestroyedEvent {
public MIDetachedEvent(int token) {
super(token);
Index: src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java,v
retrieving revision 1.2
diff -u -r1.2 MIGDBExitEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java 26 Oct 2002 20:26:15 -0000 1.2
+++ src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java 8 Jan 2003 15:39:46 -0000
@@ -10,7 +10,7 @@
/**
* Gdb Session terminated.
*/
-public class MIGDBExitEvent extends MIEvent {
+public class MIGDBExitEvent extends MIDestroyedEvent {
public MIGDBExitEvent(int token) {
super(token);
Index: src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java,v
retrieving revision 1.5
diff -u -r1.5 MIInferiorExitEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java 26 Oct 2002 20:26:21 -0000 1.5
+++ src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java 8 Jan 2003 15:39:46 -0000
@@ -19,7 +19,7 @@
* ^done,reason="exited",exit-code="04"
*
*/
-public class MIInferiorExitEvent extends MIEvent {
+public class MIInferiorExitEvent extends MIDestroyedEvent {
int code = 0;
Index: src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java,v
retrieving revision 1.3
diff -u -r1.3 MIThreadExitEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java 26 Oct 2002 20:27:10 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java 8 Jan 2003 15:39:46 -0000
@@ -10,7 +10,7 @@
* This can not be detected yet by gdb/mi.
*
*/
-public class MIThreadExitEvent extends MIEvent {
+public class MIThreadExitEvent extends MIDestroyedEvent {
int tid;