Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java32
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);
}

Back to the top