package org.erlide.backend.debug.events;
import org.eclipse.debug.core.DebugEvent;
import org.erlide.backend.debug.model.ErlangDebugTarget;
import org.erlide.backend.debug.model.ErlangProcess;
import org.erlide.util.ErlLogger;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangPid;
public class BreakAtEvent extends MetaEvent {
private final String module;
private final int line;
public BreakAtEvent(final OtpErlangPid pid, final String module, final int line,
final OtpErlangObject le) {
super(pid, null);
this.module = module;
this.line = line;
}
@Override
public void execute(final ErlangDebugTarget debugTarget) {
if (module == null || line == -1) {
ErlLogger.debug("can't do anything with no module/line defined");
return;
}
final ErlangProcess erlangProcess = debugTarget
.getOrCreateErlangProcess(getPid(debugTarget));
// FIXME can't get stack in wait...
// should be possible according to dbg_ui_trace_win....
erlangProcess.getStackAndBindings(module, line);
if (erlangProcess.isStepping()) {
erlangProcess.fireSuspendEvent(DebugEvent.STEP_END);
} else {
erlangProcess.fireSuspendEvent(DebugEvent.BREAKPOINT);
}
erlangProcess.setNotStepping();
}
public String getModule() {
return module;
}
public int getLine() {
return line;
}
}