Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Leherbauer2010-02-17 09:33:12 +0000
committerAnton Leherbauer2010-02-17 09:33:12 +0000
commita603dc072a82d5588c64ef9be2990aadca016da0 (patch)
treebe4a6e22e759a67a662bb027fc5a9ac6350d8b96 /dsf/org.eclipse.cdt.dsf.ui
parented9c03f437b6ccc693ebd5e68b6a137af8f74f8e (diff)
downloadorg.eclipse.cdt-a603dc072a82d5588c64ef9be2990aadca016da0.tar.gz
org.eclipse.cdt-a603dc072a82d5588c64ef9be2990aadca016da0.tar.xz
org.eclipse.cdt-a603dc072a82d5588c64ef9be2990aadca016da0.zip
[302006] Disassembly view doesn't take into account active debug context when jumping to an address
Diffstat (limited to 'dsf/org.eclipse.cdt.dsf.ui')
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java18
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java13
2 files changed, 17 insertions, 14 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 691abe99f6a..b2c08322f5b 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
@@ -181,18 +181,20 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
} else if (dmContext instanceof IFrameDMContext) {
// switch to different frame
IFrameDMContext frame= (IFrameDMContext) dmContext;
- final IDMContext[] parents= frame.getParents();
- for (IDMContext parent : parents) {
- if (parent instanceof IExecutionDMContext) {
- fTargetContext= (IExecutionDMContext) parent;
- fTargetFrameContext= frame;
+ IExecutionDMContext newExeDmc = DMContexts.getAncestorOfType(frame, IExecutionDMContext.class);
+ if (newExeDmc != null) {
+ IDisassemblyDMContext newDisDmc = DMContexts.getAncestorOfType(newExeDmc, IDisassemblyDMContext.class);
+ IDisassemblyDMContext oldDisDmc = DMContexts.getAncestorOfType(fTargetContext, IDisassemblyDMContext.class);
+ result.contextChanged = !newDisDmc.equals(oldDisDmc);
+ fTargetContext= newExeDmc;
+ fTargetFrameContext= frame;
+ if (!result.contextChanged) {
fCallback.gotoFrameIfActive(frame.getLevel());
- result.frameLevel = getFrameLevel();
- break;
}
+ result.frameLevel = getFrameLevel();
}
}
-
+
return result;
}
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 a716032d6a4..2198932c0cf 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
@@ -1842,7 +1842,12 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
fJumpToAddressAction.setEnabled(true);
fAddressBar.enableAddressBox(true);
- updatePC(PC_UNKNOWN);
+ int activeFrame = getActiveStackFrame();
+ if (activeFrame > 0) {
+ gotoFrame(activeFrame);
+ } else {
+ updatePC(PC_UNKNOWN);
+ }
if (fGotoAddressPending != PC_UNKNOWN) {
gotoAddress(fGotoAddressPending);
@@ -1856,10 +1861,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
fAddressBar.enableAddressBox(false);
fViewer.removeViewportListener(this);
fGotoMarkerPending = null;
-// invokeLater(new Runnable() {
-// public void run() {
-// closePart();
-// }});
}
updateTitle();
updateStateDependentActions();
@@ -1917,7 +1918,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
fGotoFramePending = false;
fPCAddress = fFrameAddress = PC_RUNNING;
fTargetFrame = -1;
- fGotoAddressPending = fFocusAddress;
+ fGotoAddressPending = PC_UNKNOWN;
fFocusAddress = PC_UNKNOWN;
setFocusPosition(null);
fPCHistory.clear();

Back to the top