1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[294605] [disassembly view] Exception from toggle breakpoint action after viewer refresh

This commit is contained in:
Anton Leherbauer 2009-11-10 09:24:44 +00:00
parent cddf441f70
commit cb50de1748
2 changed files with 25 additions and 13 deletions

View file

@ -2493,10 +2493,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
fPCHistory.clear(); fPCHistory.clear();
fPendingPCUpdates.clear(); fPendingPCUpdates.clear();
fFile2Storage.clear(); fFile2Storage.clear();
DisassemblyDocument doc= fDocument; fDocument.clear();
fDocument = createDocument();
fViewer.setDocument(fDocument, new AnnotationModel()); fViewer.setDocument(fDocument, new AnnotationModel());
doc.dispose();
if (fDebugSessionId != null) { if (fDebugSessionId != null) {
attachBreakpointsAnnotationModel(); attachBreakpointsAnnotationModel();
fDocument.insertInvalidAddressRange(0, 0, fStartAddress, fEndAddress); fDocument.insertInvalidAddressRange(0, 0, fStartAddress, fEndAddress);

View file

@ -19,10 +19,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.text.REDDocument; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.text.REDDocument;
import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.text.REDTextStore;
import org.eclipse.core.resources.IStorage; import org.eclipse.core.resources.IStorage;
import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage; import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage;
import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.BadPositionCategoryException; import org.eclipse.jface.text.BadPositionCategoryException;
import org.eclipse.jface.text.DefaultLineTracker;
import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Position; import org.eclipse.jface.text.Position;
@ -39,9 +41,9 @@ public class DisassemblyDocument extends REDDocument {
private final static boolean DEBUG = false; private final static boolean DEBUG = false;
public ArrayList<AddressRangePosition> fInvalidAddressRanges = new ArrayList<AddressRangePosition>(); private final ArrayList<AddressRangePosition> fInvalidAddressRanges = new ArrayList<AddressRangePosition>();
public ArrayList<SourcePosition> fInvalidSource = new ArrayList<SourcePosition>(); private final ArrayList<SourcePosition> fInvalidSource = new ArrayList<SourcePosition>();
private Map<IStorage, SourceFileInfo> fFileInfoMap = new HashMap<IStorage, SourceFileInfo>(); private final Map<IStorage, SourceFileInfo> fFileInfoMap = new HashMap<IStorage, SourceFileInfo>();
private int fMaxFunctionLength = 0; private int fMaxFunctionLength = 0;
@ -73,6 +75,8 @@ public class DisassemblyDocument extends REDDocument {
addPositionCategory(CATEGORY_LABELS); addPositionCategory(CATEGORY_LABELS);
setRadix(16); setRadix(16);
setShowRadixPrefix(false); setShowRadixPrefix(false);
fNumberOfInstructions = 0;
fMeanSizeOfInstructions = 4;
} }
/** /**
@ -81,14 +85,24 @@ public class DisassemblyDocument extends REDDocument {
@Override @Override
public void dispose() { public void dispose() {
super.dispose(); super.dispose();
if (fFileInfoMap != null) { // cleanup source info
// cleanup source info for (Iterator<SourceFileInfo> iter = fFileInfoMap.values().iterator(); iter.hasNext();) {
for (Iterator<SourceFileInfo> iter = fFileInfoMap.values().iterator(); iter.hasNext();) { SourceFileInfo fi = iter.next();
SourceFileInfo fi = iter.next(); fi.dispose();
fi.dispose();
}
fFileInfoMap = null;
} }
fFileInfoMap.clear();
fInvalidAddressRanges.clear();
fInvalidSource.clear();
}
/**
* Clears all content and state.
*/
public void clear() {
dispose();
setTextStore(new REDTextStore());
setLineTracker(new DefaultLineTracker());
completeInitialization();
} }
public List<AddressRangePosition> getInvalidAddressRanges() { public List<AddressRangePosition> getInvalidAddressRanges() {