Skip to main content
summaryrefslogtreecommitdiffstats
path: root/dsf
diff options
context:
space:
mode:
authorAnton Leherbauer2010-09-15 11:05:51 +0000
committerAnton Leherbauer2010-09-15 11:05:51 +0000
commit588a6efd6780f13fc4fb66727ad3ae3ee0338552 (patch)
treecbe1ac093163ead94cc3488f499a802e6a719726 /dsf
parent3a89b51a3780f9595fe8f0b86d150026343124c2 (diff)
downloadorg.eclipse.cdt-588a6efd6780f13fc4fb66727ad3ae3ee0338552.tar.gz
org.eclipse.cdt-588a6efd6780f13fc4fb66727ad3ae3ee0338552.tar.xz
org.eclipse.cdt-588a6efd6780f13fc4fb66727ad3ae3ee0338552.zip
Bug 325063 - [disassembly] view occasionally accepts no further scrolling/PC changes with unhandled assert
Diffstat (limited to 'dsf')
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java25
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java26
2 files changed, 23 insertions, 28 deletions
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
index 860216f75a1..c24c8279643 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
@@ -32,23 +32,23 @@ import org.eclipse.cdt.dsf.concurrent.Query;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IDisassembly;
-import org.eclipse.cdt.dsf.debug.service.IExpressions;
-import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
-import org.eclipse.cdt.dsf.debug.service.IInstruction;
-import org.eclipse.cdt.dsf.debug.service.IMixedInstruction;
-import org.eclipse.cdt.dsf.debug.service.IRunControl;
-import org.eclipse.cdt.dsf.debug.service.ISourceLookup;
-import org.eclipse.cdt.dsf.debug.service.IStack;
import org.eclipse.cdt.dsf.debug.service.IDisassembly.IDisassemblyDMContext;
+import org.eclipse.cdt.dsf.debug.service.IExpressions;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMAddress;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
+import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData;
+import org.eclipse.cdt.dsf.debug.service.IInstruction;
+import org.eclipse.cdt.dsf.debug.service.IMixedInstruction;
+import org.eclipse.cdt.dsf.debug.service.IRunControl;
import org.eclipse.cdt.dsf.debug.service.IRunControl.IExecutionDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl.IExitedDMEvent;
import org.eclipse.cdt.dsf.debug.service.IRunControl.IResumedDMEvent;
import org.eclipse.cdt.dsf.debug.service.IRunControl.ISuspendedDMEvent;
+import org.eclipse.cdt.dsf.debug.service.ISourceLookup;
import org.eclipse.cdt.dsf.debug.service.ISourceLookup.ISourceLookupDMContext;
+import org.eclipse.cdt.dsf.debug.service.IStack;
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMData;
import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin;
@@ -244,20 +244,24 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
stack.getTopFrame(fTargetContext, new DataRequestMonitor<IFrameDMContext>(executor, null) {
@Override
protected void handleCompleted() {
- fCallback.setUpdatePending(false);
fTargetFrameContext= getData();
if (fTargetFrameContext != null) {
retrieveFrameAddressInSessionThread(frame);
+ } else {
+ fCallback.setUpdatePending(false);
}
}
});
} else {
// TODO retrieve other stack frame
+ fCallback.setUpdatePending(false);
}
return;
}
- else {
- assert frame == fTargetFrameContext.getLevel();
+ else if (frame != fTargetFrameContext.getLevel()) {
+ // frame context has changed in the meantime - reinvoke
+ retrieveFrameAddressInSessionThread(fTargetFrameContext.getLevel());
+ return;
}
stack.getFrameData(fTargetFrameContext, new DataRequestMonitor<IFrameDMData>(executor, null) {
@@ -281,7 +285,6 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
fCallback.gotoFrame(frame, addressValue);
}
}
-
});
} else {
final IStatus status= getStatus();
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java
index e10f4f341c4..7303cbd4008 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java
@@ -1340,19 +1340,10 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
AddressRangePosition pos = getPositionOfAddress(address);
if (pos != null) {
if (pos.fValid) {
- AddressRangePosition previousPos = /* fUpdateBeforeFocus ? getPositionOfAddress(pos.fAddressOffset-1): */ null;
- if (previousPos == null || previousPos.fValid) {
- if (fGotoAddressPending.equals(address)) {
- fGotoAddressPending = PC_UNKNOWN;
- }
- gotoPosition(pos, false);
- } else {
- int lines = fBufferZone+3;
- BigInteger endAddress = pos.fAddressOffset;
- BigInteger startAddress = previousPos.fAddressOffset.max(
- endAddress.subtract(BigInteger.valueOf(lines * fDocument.getMeanSizeOfInstructions())));
- retrieveDisassembly(startAddress, endAddress, lines);
- }
+ if (fGotoAddressPending.equals(address)) {
+ fGotoAddressPending = PC_UNKNOWN;
+ }
+ gotoPosition(pos, false);
} else {
int lines = fBufferZone+3;
BigInteger endAddress = pos.fAddressOffset.add(pos.fAddressLength).min(
@@ -2032,6 +2023,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
*/
public void gotoFrame(int frame) {
assert isGuiThread();
+ fGotoAddressPending = PC_UNKNOWN;
gotoFrame(frame, PC_UNKNOWN);
}
@@ -2051,6 +2043,10 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
public void gotoFrame(int frame, BigInteger address) {
assert isGuiThread();
if (DEBUG) System.out.println("gotoFrame " + frame + " " + getAddressText(address)); //$NON-NLS-1$ //$NON-NLS-2$
+ if (fGotoAddressPending == fFrameAddress) {
+ // cancel goto address from previous goto frame
+ fGotoAddressPending = PC_UNKNOWN;
+ }
fTargetFrame = frame;
fFrameAddress = address;
if (fTargetFrame == -1) {
@@ -2091,10 +2087,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
addToPCHistory(pcPos);
}
fGotoFramePending = false;
- if (fGotoAddressPending == fFrameAddress) {
- fGotoAddressPending = PC_UNKNOWN;
- }
-// if (DEBUG) System.out.println("pc updated "+getAddressText(address)); //$NON-NLS-1$
gotoPosition(pcPos, false);
updateVisibleArea();
} else {

Back to the top