diff options
author | Anton Leherbauer | 2010-02-17 09:33:12 +0000 |
---|---|---|
committer | Anton Leherbauer | 2010-02-17 09:33:12 +0000 |
commit | a603dc072a82d5588c64ef9be2990aadca016da0 (patch) | |
tree | be4a6e22e759a67a662bb027fc5a9ac6350d8b96 /dsf/org.eclipse.cdt.dsf.ui | |
parent | ed9c03f437b6ccc693ebd5e68b6a137af8f74f8e (diff) | |
download | org.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')
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(); |