use of org.eclipse.che.api.debug.shared.model.impl.event.BreakpointActivatedEventImpl in project che by eclipse.
the class NodeJsDebugger method addBreakpoint.
@Override
public void addBreakpoint(Breakpoint breakpoint) throws DebuggerException {
try {
Location location = breakpoint.getLocation();
library.setBreakpoint(location.getTarget(), location.getLineNumber());
debuggerCallback.onEvent(new BreakpointActivatedEventImpl(breakpoint));
} catch (NodeJsDebuggerTerminatedException e) {
disconnect();
throw e;
} catch (NodeJsDebuggerException e) {
throw new DebuggerException("Can't add breakpoint: " + breakpoint + ". " + e.getMessage(), e);
}
}
use of org.eclipse.che.api.debug.shared.model.impl.event.BreakpointActivatedEventImpl in project che by eclipse.
the class JavaDebugger method addBreakpoint.
@Override
public void addBreakpoint(Breakpoint breakpoint) throws DebuggerException {
final String className = findFQN(breakpoint);
final int lineNumber = breakpoint.getLocation().getLineNumber();
List<ReferenceType> classes = vm.classesByName(className);
// it may mean that class doesn't loaded by a target JVM yet
if (classes.isEmpty()) {
deferBreakpoint(breakpoint);
throw new DebuggerException("Class not loaded");
}
ReferenceType clazz = classes.get(0);
List<com.sun.jdi.Location> locations;
try {
locations = clazz.locationsOfLine(lineNumber);
} catch (AbsentInformationException | ClassNotPreparedException e) {
throw new DebuggerException(e.getMessage(), e);
}
if (locations.isEmpty()) {
throw new DebuggerException("Line " + lineNumber + " not found in class " + className);
}
com.sun.jdi.Location location = locations.get(0);
if (location.method() == null) {
// Line is out of method.
throw new DebuggerException("Invalid line " + lineNumber + " in class " + className);
}
// Ignore new breakpoint if already have breakpoint at the same location.
EventRequestManager requestManager = getEventManager();
for (BreakpointRequest breakpointRequest : requestManager.breakpointRequests()) {
if (location.equals(breakpointRequest.location())) {
LOG.debug("Breakpoint at {} already set", location);
return;
}
}
try {
EventRequest breakPointRequest = requestManager.createBreakpointRequest(location);
breakPointRequest.setSuspendPolicy(EventRequest.SUSPEND_ALL);
String expression = breakpoint.getCondition();
if (!(expression == null || expression.isEmpty())) {
ExpressionParser parser = ExpressionParser.newInstance(expression);
breakPointRequest.putProperty("org.eclipse.che.ide.java.debug.condition.expression.parser", parser);
}
breakPointRequest.setEnabled(true);
} catch (NativeMethodException | IllegalThreadStateException | InvalidRequestStateException e) {
throw new DebuggerException(e.getMessage(), e);
}
debuggerCallback.onEvent(new BreakpointActivatedEventImpl(new BreakpointImpl(breakpoint.getLocation(), true, breakpoint.getCondition())));
LOG.debug("Add breakpoint: {}", location);
}
use of org.eclipse.che.api.debug.shared.model.impl.event.BreakpointActivatedEventImpl in project che by eclipse.
the class ZendDebugger method sendAddBreakpoints.
private void sendAddBreakpoints(String remoteFilePath) {
List<ZendDbgBreakpoint> fileBreakpoints = new ArrayList<>();
for (ZendDbgBreakpoint dbgBreakpoint : breakpoints.values()) {
if (dbgBreakpoint.getLocation().getResourcePath().equals(remoteFilePath)) {
fileBreakpoints.add(dbgBreakpoint);
}
}
for (ZendDbgBreakpoint dbgBreakpoint : fileBreakpoints) {
AddBreakpointResponse response = debugConnection.sendRequest(new AddBreakpointRequest(1, 2, dbgBreakpoint.getLocation().getLineNumber(), remoteFilePath));
if (isOK(response)) {
// Breakpoint was successfully registered in active session, send breakpoint activated event
breakpointIds.put(dbgBreakpoint, response.getBreakpointID());
debugCallback.onEvent(new BreakpointActivatedEventImpl(dbgBreakpoint.getVfsBreakpoint()));
}
}
}
use of org.eclipse.che.api.debug.shared.model.impl.event.BreakpointActivatedEventImpl in project che by eclipse.
the class ZendDebugger method sendAddBreakpoint.
private void sendAddBreakpoint(ZendDbgBreakpoint dbgBreakpoint) {
AddBreakpointResponse response = debugConnection.sendRequest(new AddBreakpointRequest(1, 2, dbgBreakpoint.getLocation().getLineNumber(), dbgBreakpoint.getLocation().getResourcePath()));
if (isOK(response)) {
// Breakpoint was successfully registered in active session, send breakpoint activated event
breakpointIds.put(dbgBreakpoint, response.getBreakpointID());
debugCallback.onEvent(new BreakpointActivatedEventImpl(dbgBreakpoint.getVfsBreakpoint()));
}
}
use of org.eclipse.che.api.debug.shared.model.impl.event.BreakpointActivatedEventImpl in project che by eclipse.
the class GdbDebugger method addBreakpoint.
@Override
public void addBreakpoint(Breakpoint breakpoint) throws DebuggerException {
try {
Location location = breakpoint.getLocation();
if (location.getTarget() == null) {
gdb.breakpoint(location.getLineNumber());
} else {
gdb.breakpoint(location.getTarget(), location.getLineNumber());
}
debuggerCallback.onEvent(new BreakpointActivatedEventImpl(breakpoint));
} catch (GdbTerminatedException e) {
disconnect();
throw e;
} catch (IOException | GdbParseException | InterruptedException e) {
throw new DebuggerException("Can't add breakpoint: " + breakpoint + ". " + e.getMessage(), e);
}
}
Aggregations