Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Implementing the memory view support.

Implementing the memory view support.

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v
retrieving revision 1.17
diff -u -r1.17 ChangeLog
--- ChangeLog 15 Oct 2002 18:29:04 -0000 1.17
+++ ChangeLog 15 Oct 2002 21:41:27 -0000
@@ -1,4 +1,12 @@
 2002-10-15 Mikhail Khodjaiants
+ * CDebugModel.java: Implementing the memory view support.
+ * ICMemoryManager: Implementing the memory view support.
+ * IFormattedMemoryBlock.java: Implementing the memory view support.
+ * CDebugTarget.java: Implementing the memory view support.
+ * CFormattedMemoryBlock.java: Implementing the memory view support.
+ * CMemoryManager.java: Implementing the memory view support.
+
+2002-10-15 Mikhail Khodjaiants
  * ICDebugConstants.java: New interface that contains the constant definitions for C/C++ debug plug-in.
  * CSourceManager.java: Implementation of the 'Automatically switch to disassembly mode' preference.
 
Index: src/org/eclipse/cdt/debug/core/CDebugModel.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java,v
retrieving revision 1.31
diff -u -r1.31 CDebugModel.java
--- src/org/eclipse/cdt/debug/core/CDebugModel.java 4 Oct 2002 18:09:01 -0000 1.31
+++ src/org/eclipse/cdt/debug/core/CDebugModel.java 15 Oct 2002 21:41:27 -0000
@@ -15,6 +15,7 @@
 import org.eclipse.cdt.debug.core.cdi.ICDISessionObject;
 import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
 import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.internal.core.CDebugUtils;
@@ -23,6 +24,7 @@
 import org.eclipse.cdt.debug.internal.core.breakpoints.CWatchpoint;
 import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
 import org.eclipse.cdt.debug.internal.core.model.CExpression;
+import org.eclipse.cdt.debug.internal.core.model.CFormattedMemoryBlock;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -355,7 +357,75 @@
   }
   return null;
  }

+
+ public static IFormattedMemoryBlock createFormattedMemoryBlock( IDebugTarget target,
+                 long startAddress,
+                    int format,
+                    int wordSize,
+                    int numberOfRows,
+                    int numberOfColumns,
+                    char paddingChar ) throws DebugException
+ {
+  if ( target != null && target instanceof CDebugTarget )
+  {
+   try
+   {
+    ICDIMemoryBlock cdiMemoryBlock = ((CDebugTarget)target).getCDISession()
+                    .getMemoryManager()
+                    .createMemoryBlock( startAddress, wordSize * numberOfRows * numberOfColumns );
+    return new CFormattedMemoryBlock( (CDebugTarget)target,
+              cdiMemoryBlock,
+              format,
+              wordSize,
+              numberOfRows,
+              numberOfColumns,
+              paddingChar );
+   }
+   catch( CDIException e )
+   {
+    throw new DebugException( new Status( IStatus.ERROR,
+               getPluginIdentifier(),
+               DebugException.TARGET_REQUEST_FAILED,
+               e.getMessage(),
+               null ) );
+   }
+  }
+  return null;
+ }
+
+ public static IFormattedMemoryBlock createFormattedMemoryBlock( IDebugTarget target,
+                 long startAddress,
+                    int format,
+                    int wordSize,
+                    int numberOfRows,
+                    int numberOfColumns ) throws DebugException
+ {
+  if ( target != null && target instanceof CDebugTarget )
+  {
+   try
+   {
+    ICDIMemoryBlock cdiMemoryBlock = ((CDebugTarget)target).getCDISession()
+                    .getMemoryManager()
+                    .createMemoryBlock( startAddress, wordSize * numberOfRows * numberOfColumns );
+    return new CFormattedMemoryBlock( (CDebugTarget)target,
+              cdiMemoryBlock,
+              format,
+              wordSize,
+              numberOfRows,
+              numberOfColumns );
+   }
+   catch( CDIException e )
+   {
+    throw new DebugException( new Status( IStatus.ERROR,
+               getPluginIdentifier(),
+               DebugException.TARGET_REQUEST_FAILED,
+               e.getMessage(),
+               null ) );
+   }
+  }
+  return null;
+ }
+
  private static void stopInMain( CDebugTarget target ) throws DebugException
  {
   ICDILocation location = target.getCDISession().getBreakpointManager().createLocation( "", "main", 0 );
Index: src/org/eclipse/cdt/debug/core/ICMemoryManager.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/core/ICMemoryManager.java
diff -N src/org/eclipse/cdt/debug/core/ICMemoryManager.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/core/ICMemoryManager.java 15 Oct 2002 21:41:27 -0000
@@ -0,0 +1,28 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.core;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+
+/**
+ * Enter type comment.
+ *
+ * @since: Oct 15, 2002
+ */
+public interface ICMemoryManager extends IAdaptable
+{
+ void addBlock( IMemoryBlock memoryBlock ) throws DebugException;
+
+ void removeBlock( IMemoryBlock memoryBlock ) throws DebugException;
+
+ void removeAllBlocks() throws DebugException;
+
+ IMemoryBlock getBlock( int index );
+
+ IMemoryBlock[] getBlocks();
+}
Index: src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java,v
retrieving revision 1.1
diff -u -r1.1 IFormattedMemoryBlock.java
--- src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java 6 Aug 2002 18:56:15 -0000 1.1
+++ src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java 15 Oct 2002 21:41:28 -0000
@@ -6,7 +6,7 @@
 package org.eclipse.cdt.debug.core;
 
 import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.model.IDebugElement;
+import org.eclipse.debug.core.model.IMemoryBlock;
 
 /**
  *
@@ -15,16 +15,9 @@
  *
  * @since Jul 31, 2002
  */
-public interface IFormattedMemoryBlock extends IDebugElement
+public interface IFormattedMemoryBlock extends IMemoryBlock
 {
  /**
-  * Returns the start address of this memory block.
-  *
-  * @return the start address of this memory block
-  */
- long getStartAddress();
-
- /**
   * Returns the format of the memory words of this block.
   *
   * @return The format of the memory words of this block
@@ -66,6 +59,8 @@
   */
  IFormattedMemoryBlockRow[] getRows();
 
+ char getPaddingCharacter();
+
  long nextRowAddress();
  
  long previousRowAddress();
@@ -74,14 +69,12 @@
  
  long previousPageAddress();
 
- void reformat( long startAddress,
-       int format,
+ void reformat( int format,
        int wordSize,
        int numberOfRows,
        int numberOfColumns ) throws DebugException;
 
- void reformat( long startAddress,
-       int format,
+ void reformat( int format,
        int wordSize,
        int numberOfRows,
        int numberOfColumns,
Index: src/org/eclipse/cdt/debug/internal/core/CMemoryManager.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/internal/core/CMemoryManager.java
diff -N src/org/eclipse/cdt/debug/internal/core/CMemoryManager.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/internal/core/CMemoryManager.java 15 Oct 2002 21:41:28 -0000
@@ -0,0 +1,106 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.internal.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.debug.core.ICMemoryManager;
+import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IDebugTarget;
+import org.eclipse.debug.core.model.IMemoryBlock;
+
+/**
+ * Enter type comment.
+ *
+ * @since: Oct 15, 2002
+ */
+public class CMemoryManager implements ICMemoryManager
+{
+ private List fBlocks;
+ private CDebugTarget fDebugTarget;
+
+ /**
+  * Constructor for CMemoryManager.
+  */
+ public CMemoryManager( CDebugTarget target )
+ {
+  fBlocks = new ArrayList( 4 );
+  setDebugTarget( target );
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.ICMemoryManager#addBlock(IMemoryBlock)
+  */
+ public void addBlock( IMemoryBlock memoryBlock ) throws DebugException
+ {
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.ICMemoryManager#removeBlock(IMemoryBlock)
+  */
+ public void removeBlock( IMemoryBlock memoryBlock ) throws DebugException
+ {
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.ICMemoryManager#removeAllBlocks()
+  */
+ public void removeAllBlocks() throws DebugException
+ {
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.ICMemoryManager#getBlock(int)
+  */
+ public IMemoryBlock getBlock( int index )
+ {
+  return null;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.ICMemoryManager#getBlocks()
+  */
+ public IMemoryBlock[] getBlocks()
+ {
+  return null;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
+  */
+ public Object getAdapter( Class adapter )
+ {
+  if ( adapter.equals( ICMemoryManager.class ) )
+  {
+   return this;
+  }
+  if ( adapter.equals( CMemoryManager.class ) )
+  {
+   return this;
+  }
+  if ( adapter.equals( IDebugTarget.class ) )
+  {
+   return fDebugTarget;
+  }
+  return null;
+ }
+
+ public IDebugTarget getDebugTarget()
+ {
+  return fDebugTarget;
+ }

+ protected void setDebugTarget( CDebugTarget target )
+ {
+  fDebugTarget = target;
+ }

+ public void dispose()
+ {
+ }
+}
Index: src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java,v
retrieving revision 1.44
diff -u -r1.44 CDebugTarget.java
--- src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java 14 Oct 2002 05:03:22 -0000 1.44
+++ src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java 15 Oct 2002 21:41:28 -0000
@@ -16,6 +16,7 @@
 import org.eclipse.cdt.debug.core.ICDebugTargetType;
 import org.eclipse.cdt.debug.core.ICExpressionEvaluator;
 import org.eclipse.cdt.debug.core.ICLineBreakpoint;
+import org.eclipse.cdt.debug.core.ICMemoryManager;
 import org.eclipse.cdt.debug.core.ICWatchpoint;
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
 import org.eclipse.cdt.debug.core.IFormattedMemoryRetrieval;
@@ -53,13 +54,14 @@
 import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
-import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLocator;
-import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager;
-import org.eclipse.cdt.debug.internal.core.sourcelookup.DisassemblyManager;
 import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation;
 import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
 import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode;
+import org.eclipse.cdt.debug.internal.core.CMemoryManager;
 import org.eclipse.cdt.debug.internal.core.breakpoints.CBreakpoint;
+import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLocator;
+import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager;
+import org.eclipse.cdt.debug.internal.core.sourcelookup.DisassemblyManager;
 import org.eclipse.core.resources.IMarkerDelta;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -199,6 +201,11 @@
  private List fTemporaryBreakpoints;
 
  /**
+  * A memory manager for this target.
+  */
+ private CMemoryManager fMemoryManager;
+
+ /**
   * Constructor for CDebugTarget.
   * @param target
   */
@@ -241,6 +248,7 @@
   setSourceSearchPath();
   initializeBreakpoints();
   initializeRegisters();
+  initializeMemoryManager();
   getLaunch().addDebugTarget( this );
   fireCreationEvent();
  }
@@ -289,6 +297,11 @@
   createMainRegisterGroup();
  }
 
+ protected void initializeMemoryManager()
+ {
+  fMemoryManager = new CMemoryManager( this );
+ }
+
  /* (non-Javadoc)
   * @see org.eclipse.debug.core.model.IDebugTarget#getProcess()
   */
@@ -797,6 +810,8 @@
     return getSourceLocator();
    }
   }
+  if ( adapter.equals( ICMemoryManager.class ) )
+   return getMemoryManager();
   return super.getAdapter( adapter );
  }
  
@@ -1044,6 +1059,7 @@
   DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener( this );
   DebugPlugin.getDefault().getExpressionManager().removeExpressionListener( this );
   DebugPlugin.getDefault().getLaunchManager().removeLaunchListener( this );
+  disposeMemoryManager();
   removeAllExpressions();
   try
   {
@@ -1893,5 +1909,15 @@
    return ((CSourceManager)sl).getRealMode();
   }
   return ISourceMode.MODE_SOURCE;
+ }

+ protected CMemoryManager getMemoryManager()
+ {
+  return fMemoryManager;
+ }

+ private void disposeMemoryManager()
+ {
+  getMemoryManager().dispose();
  }
 }
Index: src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java
diff -N src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 15 Oct 2002 21:41:28 -0000
@@ -0,0 +1,219 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.internal.core.model;
+
+import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
+import org.eclipse.cdt.debug.core.IFormattedMemoryBlockRow;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
+import org.eclipse.debug.core.DebugException;
+
+/**
+ * Enter type comment.
+ *
+ * @since: Oct 15, 2002
+ */
+public class CFormattedMemoryBlock extends CDebugElement implements IFormattedMemoryBlock
+{
+ private ICDIMemoryBlock fCDIMemoryBlock;
+ private int fFormat;
+ private int fWordSize;
+ private int fNumberOfRows;
+ private int fNumberOfColumns;
+ private boolean fDisplayAscii = true;
+ private char fPaddingChar = 0;
+
+ /**
+  * Constructor for CFormattedMemoryBlock.
+  * @param target
+  */
+ public CFormattedMemoryBlock( CDebugTarget target,
+          ICDIMemoryBlock cdiMemoryBlock,
+          int format,
+            int wordSize,
+            int numberOfRows,
+            int numberOfColumns )
+ {
+  super( target );
+  fCDIMemoryBlock = cdiMemoryBlock;
+  fFormat = format;
+  fWordSize = wordSize;
+  fNumberOfRows = numberOfRows;
+  fNumberOfColumns = numberOfColumns;
+  fDisplayAscii = false;
+  fPaddingChar = 0;
+ }
+
+ /**
+  * Constructor for CFormattedMemoryBlock.
+  * @param target
+  */
+ public CFormattedMemoryBlock( CDebugTarget target,
+          ICDIMemoryBlock cdiMemoryBlock,
+          int format,
+            int wordSize,
+            int numberOfRows,
+            int numberOfColumns,
+            char paddingChar )
+ {
+  super( target );
+  fCDIMemoryBlock = cdiMemoryBlock;
+  fFormat = format;
+  fWordSize = wordSize;
+  fNumberOfRows = numberOfRows;
+  fNumberOfColumns = numberOfColumns;
+  fDisplayAscii = true;
+  fPaddingChar = paddingChar;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#getFormat()
+  */
+ public int getFormat()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#getWordSize()
+  */
+ public int getWordSize()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#getNumberOfRows()
+  */
+ public int getNumberOfRows()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#getNumberOfColumns()
+  */
+ public int getNumberOfColumns()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#displayASCII()
+  */
+ public boolean displayASCII()
+ {
+  return false;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#getRows()
+  */
+ public IFormattedMemoryBlockRow[] getRows()
+ {
+  return null;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#nextRowAddress()
+  */
+ public long nextRowAddress()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#previousRowAddress()
+  */
+ public long previousRowAddress()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#nextPageAddress()
+  */
+ public long nextPageAddress()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#previousPageAddress()
+  */
+ public long previousPageAddress()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#reformat(long, int, int, int, int)
+  */
+ public void reformat( int format,
+        int wordSize,
+        int numberOfRows,
+        int numberOfColumns ) throws DebugException
+ {
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#reformat(long, int, int, int, int, char)
+  */
+ public void reformat( int format,
+        int wordSize,
+        int numberOfRows,
+        int numberOfColumns,
+        char paddingChar ) throws DebugException
+ {
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.debug.core.model.IMemoryBlock#getStartAddress()
+  */
+ public long getStartAddress()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.debug.core.model.IMemoryBlock#getLength()
+  */
+ public long getLength()
+ {
+  return 0;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.debug.core.model.IMemoryBlock#getBytes()
+  */
+ public byte[] getBytes() throws DebugException
+ {
+  return null;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.debug.core.model.IMemoryBlock#supportsValueModification()
+  */
+ public boolean supportsValueModification()
+ {
+  return false;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.debug.core.model.IMemoryBlock#setValue(long, byte[])
+  */
+ public void setValue( long offset, byte[] bytes ) throws DebugException
+ {
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#getPaddingCharacter()
+  */
+ public char getPaddingCharacter()
+ {
+  return 0;
+ }
+
+}


Back to the top