Skip to main content

[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;
 	}



Back to the top