diff options
Diffstat (limited to 'plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/actions/TCFActionStepOut.java')
-rw-r--r-- | plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/actions/TCFActionStepOut.java | 32 |
1 files changed, 7 insertions, 25 deletions
diff --git a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/actions/TCFActionStepOut.java b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/actions/TCFActionStepOut.java index d4c598c7f..962d913ea 100644 --- a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/actions/TCFActionStepOut.java +++ b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/actions/TCFActionStepOut.java @@ -6,7 +6,6 @@ import java.util.Map; import org.eclipse.tm.internal.tcf.debug.model.TCFContextState; import org.eclipse.tm.internal.tcf.debug.model.TCFLaunch; import org.eclipse.tm.tcf.protocol.IToken; -import org.eclipse.tm.tcf.protocol.Protocol; import org.eclipse.tm.tcf.services.IBreakpoints; import org.eclipse.tm.tcf.services.IRunControl; import org.eclipse.tm.tcf.services.IStackTrace; @@ -15,8 +14,6 @@ import org.eclipse.tm.tcf.util.TCFDataCache; public abstract class TCFActionStepOut extends TCFAction implements IRunControl.RunControlListener { - private static final long TIMEOUT = 10000; - private final IRunControl rc = launch.getService(IRunControl.class); private final IBreakpoints bps = launch.getService(IBreakpoints.class); @@ -46,18 +43,8 @@ public abstract class TCFActionStepOut extends TCFAction implements IRunControl. exit(new Exception("Invalid context ID")); return; } - if (!ctx.canResume(IRunControl.RM_STEP_OUT)) { - Protocol.invokeLater(TIMEOUT, new Runnable() { - public void run() { - exit(new Exception("Time out")); - } - }); - } - } - if (!state.validate()) { - state.wait(this); - return; } + if (!state.validate(this)) return; if (!state.getData().is_suspended) { exit(new Exception("Context is not suspended")); return; @@ -73,10 +60,7 @@ public abstract class TCFActionStepOut extends TCFAction implements IRunControl. return; } TCFDataCache<?> stack_trace = getStackTrace(); - if (!stack_trace.validate()) { - stack_trace.wait(this); - return; - } + if (!stack_trace.validate(this)) return; if (getStackFrameIndex() < 0) { // Stepped out of selected function exit(null); @@ -84,17 +68,16 @@ public abstract class TCFActionStepOut extends TCFAction implements IRunControl. else if (bps != null && ctx.canResume(IRunControl.RM_RESUME)) { if (bp == null) { TCFDataCache<IStackTrace.StackTraceContext> frame = getStackFrame(); - if (!frame.validate()) { - frame.wait(this); - return; - } + if (!frame.validate(this)) return; Number addr = frame.getData().getReturnAddress(); if (addr == null) { exit(new Exception("Unknown stack frame return address")); return; } + String id = "Step." + ctx.getID(); + launch.addContextActionBreakpoint(id, "Step"); bp = new HashMap<String,Object>(); - bp.put(IBreakpoints.PROP_ID, "Step" + System.currentTimeMillis()); + bp.put(IBreakpoints.PROP_ID, id); bp.put(IBreakpoints.PROP_LOCATION, addr.toString()); bp.put(IBreakpoints.PROP_CONDITION, "$thread==\"" + ctx.getID() + "\""); bp.put(IBreakpoints.PROP_ENABLED, Boolean.TRUE); @@ -162,8 +145,7 @@ public abstract class TCFActionStepOut extends TCFAction implements IRunControl. public void contextResumed(String context) { } - public void contextSuspended(String context, String pc, String reason, - Map<String, Object> params) { + public void contextSuspended(String context, String pc, String reason, Map<String,Object> params) { if (!context.equals(ctx.getID())) return; exit(null); } |