[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] When GDB/MI throws "^error .." propagate up to CDI
|
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.44
diff -u -r1.44 ChangeLog
--- ChangeLog 29 Nov 2002 20:39:28 -0000 1.44
+++ ChangeLog 2 Dec 2002 18:33:25 -0000
@@ -1,3 +1,16 @@
+2002-12-02 Alain Magloire
+
+ * src/.../mi/core/cdi/CTarget.java (updateState): If we
+ have the current thread id set it before, getCThread() if
+ it is implemented with "info threads" can override it but
+ "-stack-list-thread" does not give this information.
+ * src/.../mi/core/cdi/ErrorInfo.java: New file
+ * src/.../mi/core/cdi/EventManager.java (getReason): Return
+ an ErrorInfo also.
+ * src/.../mi/core/event/MIErroEvent.java: New file
+ * src/.../mi/core/RxThread.java (processMIOutput):
+ Generated MIErrorEvent for "^error".
+
2002-11-29 Alain Magloire
* src/.../mi/core/cdi/EventManager.java (processSuspended):
Index: src/org/eclipse/cdt/debug/mi/core/RxThread.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/RxThread.java,v
retrieving revision 1.38
diff -u -r1.38 RxThread.java
--- src/org/eclipse/cdt/debug/mi/core/RxThread.java 29 Nov 2002 18:54:31 -0000 1.38
+++ src/org/eclipse/cdt/debug/mi/core/RxThread.java 2 Dec 2002 18:33:25 -0000
@@ -19,6 +19,7 @@
import org.eclipse.cdt.debug.mi.core.command.MIExecStepInstruction;
import org.eclipse.cdt.debug.mi.core.command.MIExecUntil;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIErrorEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
@@ -153,7 +154,7 @@
} else if ("error".equals(state)) {
if (session.getMIInferior().isRunning()) {
session.getMIInferior().setSuspended();
- MIEvent event = new MIStoppedEvent(rr);
+ MIEvent event = new MIErrorEvent(rr);
session.fireEvent(event);
}
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java,v
retrieving revision 1.34
diff -u -r1.34 CTarget.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java 28 Nov 2002 16:19:25 -0000 1.34
+++ src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java 2 Dec 2002 18:33:25 -0000
@@ -131,11 +131,15 @@
*/
void updateState(int newThreadId) {
CThread[] oldThreads = currentThreads;
+
+ // If we use "info threads" in getCThreads() this
+ // will be overwritten. However if we use -stack-list-threads
+ // it does not provide to the current thread
+ currentThreadId = newThreadId;
// get the new Threads.
CThread[] newThreads = getCThreads();
currentThreads = newThreads;
- currentThreadId = newThreadId;
// Fire destroyedEvent for old threads.
if (oldThreads != null && oldThreads.length > 0) {
Index: src/org/eclipse/cdt/debug/mi/core/cdi/ErrorInfo.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/ErrorInfo.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/ErrorInfo.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/ErrorInfo.java 2 Dec 2002 18:33:25 -0000
@@ -0,0 +1,24 @@
+package org.eclipse.cdt.debug.mi.core.cdi;
+
+import org.eclipse.cdt.debug.core.cdi.ICDIErrorInfo;
+import org.eclipse.cdt.debug.mi.core.event.MIErrorEvent;
+
+/**
+ */
+public class ErrorInfo extends SessionObject implements ICDIErrorInfo {
+
+ MIErrorEvent event;
+
+ public ErrorInfo(CSession session, MIErrorEvent e) {
+ super(session);
+ event = e;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIErrorInfo#getMessage()
+ */
+ public String getMessage() {
+ return event.getMessage();
+ }
+
+}
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.24
diff -u -r1.24 EventManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 29 Nov 2002 20:39:12 -0000 1.24
+++ src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 2 Dec 2002 18:33:25 -0000
@@ -44,7 +44,7 @@
List cdiList = new ArrayList(1);
if (ignoreEventToken(miEvent.getToken())) {
- miEvent = miEvent;
+ miEvent = miEvent;
// Ignore the event if it is on the ignore list.
} else if (miEvent instanceof MIStoppedEvent) {
processSuspendedEvent((MIStoppedEvent)miEvent);
Index: src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java,v
retrieving revision 1.12
diff -u -r1.12 SuspendedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java 6 Sep 2002 20:18:21 -0000 1.12
+++ src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java 2 Dec 2002 18:33:25 -0000
@@ -9,6 +9,7 @@
import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIErrorEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
@@ -45,6 +46,8 @@
return new EndSteppingRange(session);
} else if (event instanceof MIFunctionFinishedEvent) {
return new EndSteppingRange(session);
+ } else if (event instanceof MIErrorEvent) {
+ return new ErrorInfo(session, (MIErrorEvent)event);
}
return session;
}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIErrorEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIErrorEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIErrorEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIErrorEvent.java 2 Dec 2002 18:33:25 -0000
@@ -0,0 +1,66 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+import org.eclipse.cdt.debug.mi.core.output.MIConst;
+import org.eclipse.cdt.debug.mi.core.output.MIExecAsyncOutput;
+import org.eclipse.cdt.debug.mi.core.output.MIResult;
+import org.eclipse.cdt.debug.mi.core.output.MIResultRecord;
+import org.eclipse.cdt.debug.mi.core.output.MIValue;
+
+
+
+/**
+ * (gdb)
+ * &"warning: Cannot insert breakpoint 2:\n"
+ * &"Cannot access memory at address 0x8020a3\n"
+ * 30^error,msg=3D"Cannot access memory at address 0x8020a3"=20
+ */
+public class MIErrorEvent extends MIStoppedEvent {
+
+ String msg = "";
+
+ public MIErrorEvent(MIExecAsyncOutput async) {
+ super(async);
+ parse();
+ }
+
+ public MIErrorEvent(MIResultRecord record) {
+ super(record);
+ parse();
+ }
+
+ public String getMessage() {
+ return msg;
+ }
+
+ void parse () {
+ MIResult[] results = null;
+ MIExecAsyncOutput exec = getMIExecAsyncOutput();
+ MIResultRecord rr = getMIResultRecord();
+
+ if (exec != null) {
+ results = exec.getMIResults();
+ } else if (rr != null) {
+ results = rr.getMIResults();
+ }
+
+ if (results != null) {
+ for (int i = 0; i < results.length; i++) {
+ String var = results[i].getVariable();
+ MIValue value = results[i].getMIValue();
+ String str = "";
+ if (value instanceof MIConst) {
+ str = ((MIConst)value).getString();
+ }
+
+ if (var.equals("msg")) {
+ msg = str;
+ }
+ }
+ }
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIStoppedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIStoppedEvent.java,v
retrieving revision 1.4
diff -u -r1.4 MIStoppedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIStoppedEvent.java 29 Nov 2002 18:53:42 -0000 1.4
+++ src/org/eclipse/cdt/debug/mi/core/event/MIStoppedEvent.java 2 Dec 2002 18:33:25 -0000
@@ -38,10 +38,6 @@
parse();
}
-// public MIStoppedEvent(int token) {
-// super(token);
-// }
-
public int getThreadId() {
return threadId;
}