diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java index c4b57acce2f..625344ba2e2 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java @@ -175,14 +175,19 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock * @see org.eclipse.debug.core.model.IMemoryBlockExtension#setBaseAddress(java.math.BigInteger) */ public void setBaseAddress( BigInteger address ) throws DebugException { + BigInteger current = fBaseAddress; + if (current == address || (current != null && current.equals(address))) { + return; // optimization + } + fBaseAddress = address; + fireChangeEvent(DebugEvent.STATE); } /* (non-Javadoc) * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getBytesFromOffset(java.math.BigInteger, long) */ public MemoryByte[] getBytesFromOffset( BigInteger unitOffset, long addressableUnits ) throws DebugException { - // TODO Auto-generated method stub - return null; + return getBytesFromAddress(unitOffset.add(getBigBaseAddress()) , addressableUnits); } /* (non-Javadoc) diff --git a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java index 714a8338ac7..a59b64d5ee1 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java @@ -1110,7 +1110,9 @@ public class Rendering extends Composite implements IDebugEventSetListener try { - getMemoryBlock().setValue(address.subtract(fParent.getBigBaseAddress()), byteValue); + IMemoryBlockExtension block = getMemoryBlock(); + BigInteger offset = address.subtract(block.getBigBaseAddress()); + block.setValue(offset, byteValue); } catch(Exception e) {