Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Fix Pr 38934

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.141
diff -u -r1.141 ChangeLog
--- ChangeLog	5 Jun 2003 21:18:25 -0000	1.141
+++ ChangeLog	17 Jun 2003 18:43:32 -0000
@@ -1,3 +1,9 @@
+2003-06-17 Alain Magloire
+
+	PR 38934
+	* src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java (update):
+	We have to call "-var-update" to update the register values in gdb.
+
 2003-06-05 Mikhail Khodjaiants
 	gdb/mi support of infinite values of the floating point types.
 	* DoubleValue.java
Index: src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java,v
retrieving revision 1.10
diff -u -r1.10 RegisterManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java	14 Mar 2003 16:22:32 -0000	1.10
+++ src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java	17 Jun 2003 18:43:33 -0000
@@ -21,12 +21,15 @@
 import org.eclipse.cdt.debug.mi.core.command.MIDataListChangedRegisters;
 import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames;
 import org.eclipse.cdt.debug.mi.core.command.MIVarCreate;
+import org.eclipse.cdt.debug.mi.core.command.MIVarUpdate;
 import org.eclipse.cdt.debug.mi.core.event.MIEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
 import org.eclipse.cdt.debug.mi.core.output.MIDataListChangedRegistersInfo;
 import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo;
 import org.eclipse.cdt.debug.mi.core.output.MIVar;
+import org.eclipse.cdt.debug.mi.core.output.MIVarChange;
 import org.eclipse.cdt.debug.mi.core.output.MIVarCreateInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIVarUpdateInfo;
 
 /**
  */
@@ -34,6 +37,7 @@
 
 	private List regList;
 	private boolean autoupdate;
+	MIVarChange[] noChanges = new MIVarChange[0];
 
 	public RegisterManager(Session session) {
 		super(session);
@@ -171,10 +175,32 @@
 			}
 			int[] regnos = info.getRegisterNumbers();
 			List eventList = new ArrayList(regnos.length);
+			// Now that we know the registers changed
+			// call -var-update to update the value in gdb.
+			// And send the notification.
 			for (int i = 0 ; i < regnos.length; i++) {
 				Register reg = getRegister(regnos[i]);
 				if (reg != null) {
-					eventList.add(new MIRegisterChangedEvent(changed.getToken(), reg.getName(), regnos[i]));
+					String varName = reg.getMIVar().getVarName();
+					MIVarChange[] changes = noChanges;
+					MIVarUpdate update = factory.createMIVarUpdate(varName);
+					try {
+						mi.postCommand(update);
+						MIVarUpdateInfo updateInfo = update.getMIVarUpdateInfo();
+						if (updateInfo == null) {
+							throw new CDIException("No answer");
+						}
+						changes = updateInfo.getMIVarChanges();
+					} catch (MIException e) {
+						//throw new MI2CDIException(e);
+						//eventList.add(new MIVarDeletedEvent(varName));
+					}
+					for (int j = 0 ; j < changes.length; j++) {
+						String n = changes[j].getVarName();
+						if (changes[j].isInScope()) {
+							eventList.add(new MIRegisterChangedEvent(update.getToken(), reg.getName(), regnos[i]));
+						}
+					}
 				}
 			}
 			MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);



Back to the top