Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] MemoryBlock.refresh implementation

	Implementing ICDIMemoryBlock.refresh in gdb/mi.


Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.21
diff -u -r1.21 ChangeLog
--- ChangeLog	26 Oct 2002 20:29:21 -0000	1.21
+++ ChangeLog	26 Oct 2002 23:34:29 -0000
@@ -1,5 +1,14 @@
 2002-10-25 Alain Magloire
 
+	* src/.../core/cdi/CThread.java (getStackFrames): Save the
+	current thread before changing and restore when operation finish.
+
+	* src/.../core/cdi/MemoryBlock.java (refresh):  Flush the old
+	data and get new memory.
+	(update): New method to compare individual blocks.
+
+2002-10-25 Alain Magloire
+
 	Automatically suspend/resume gdb when setting a breakpoint.
 	The workflow when debuggin which gdb command prompt is to
 	hit CTRL-C set the breakpoint and continue.  The UI debugger
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java,v
retrieving revision 1.17
diff -u -r1.17 CThread.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java	13 Oct 2002 02:26:39 -0000	1.17
+++ src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java	26 Oct 2002 23:34:32 -0000
@@ -60,6 +60,7 @@
 		CommandFactory factory = mi.getCommandFactory();
 		MIStackListFrames frames = factory.createMIStackListFrames();
 		try {
+			ICDIThread oldThread = getCTarget().getCurrentThread();
 			getCTarget().setCurrentThread(this);
 			mi.postCommand(frames);
 			MIStackListFramesInfo info = frames.getMIStackListFramesInfo();
@@ -71,6 +72,7 @@
 			for (int i = 0; i < stack.length; i++) {
 				stack[i] = new StackFrame(this, miFrames[i]);
 			}
+			getCTarget().setCurrentThread(oldThread);
 			return stack;
 		} catch (MIException e) {
 			//throw new CDIException(e.getMessage());
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java,v
retrieving revision 1.4
diff -u -r1.4 MemoryBlock.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java	20 Oct 2002 23:27:46 -0000	1.4
+++ src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java	26 Oct 2002 23:34:32 -0000
@@ -95,6 +95,14 @@
 	}
 
 	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#refresh()
+	 */
+	public void refresh() throws CDIException {
+		MemoryManager mgr = (MemoryManager)getCTarget().getCSession().getMemoryManager();
+		mgr.update(this, null);
+	}
+
+	/**
 	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getLength()
 	 */
 	public long getLength() {
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java,v
retrieving revision 1.8
diff -u -r1.8 MemoryManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java	19 Oct 2002 19:20:35 -0000	1.8
+++ src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java	26 Oct 2002 23:34:31 -0000
@@ -44,19 +44,31 @@
 		for (int i = 0; i < blocks.length; i++) {
 			if (! blocks[i].isFrozen()) {
 				try {
-					MemoryBlock block = cloneBlock(blocks[i]);
-					Long[] array = compareBlocks(blocks[i], block);
-					if (array.length > 0) {
-						eventList.add(new MIMemoryChangedEvent(array));
-					}
-					// Update the block MIDataReadMemoryInfo.
-					blocks[i].setMIDataReadMemoryInfo(block.getMIDataReadMemoryInfo());
+					update(blocks[i], eventList);
 				} catch (CDIException e) {
 				}
 			}
 		}
 		MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
 		mi.fireEvents(events);
+	}
+
+	/**
+	 * update one Block.
+	 */
+	public void update(MemoryBlock block, List aList) throws CDIException {
+		MemoryBlock newBlock = cloneBlock(block);
+		Long[] array = compareBlocks(block, newBlock);
+		// Update the block MIDataReadMemoryInfo.
+		block.setMIDataReadMemoryInfo(newBlock.getMIDataReadMemoryInfo());
+		if (array.length > 0) {
+			if (aList != null) {
+				aList.add(new MIMemoryChangedEvent(array));
+			} else {
+				MISession mi = getCSession().getMISession();
+				mi.fireEvent(new MIMemoryChangedEvent(array));
+			}
+		}
 	}
 
 	/**



Back to the top