| Index: editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
|
| diff --git a/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java b/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
|
| index 76c2e0b368a6bda2975e49c32c1046cdcabe7a25..43dec6dfd018a453dced9a22c105818bf9087334 100644
|
| --- a/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
|
| +++ b/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
|
| @@ -17,7 +17,9 @@ package com.google.dart.tools.debug.core.server;
|
| import com.google.dart.tools.core.DartCore;
|
| import com.google.dart.tools.core.internal.util.ResourceUtil;
|
| import com.google.dart.tools.debug.core.DartDebugCorePlugin;
|
| +import com.google.dart.tools.debug.core.DartDebugCorePlugin.BreakOnExceptions;
|
| import com.google.dart.tools.debug.core.breakpoints.DartBreakpoint;
|
| +import com.google.dart.tools.debug.core.server.VmConnection.BreakOnExceptionsType;
|
|
|
| import org.eclipse.core.resources.IFile;
|
| import org.eclipse.core.resources.IMarkerDelta;
|
| @@ -66,7 +68,7 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| return;
|
| }
|
| // try to set
|
| - getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() {
|
| + connection.setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() {
|
| @Override
|
| public void handleResult(VmResult<VmBreakpoint> result) {
|
| if (result.isError()) {
|
| @@ -82,7 +84,8 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| }
|
| }
|
|
|
| - private ServerDebugTarget target;
|
| + private final ServerDebugTarget target;
|
| + private final VmConnection connection;
|
|
|
| private VmIsolate mainIsolate;
|
|
|
| @@ -94,6 +97,7 @@ class ServerBreakpointManager implements IBreakpointListener {
|
|
|
| public ServerBreakpointManager(ServerDebugTarget target) {
|
| this.target = target;
|
| + this.connection = target.getConnection();
|
| }
|
|
|
| @Override
|
| @@ -123,7 +127,7 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| if (breakpoints != null) {
|
| try {
|
| for (VmBreakpoint bp : breakpoints) {
|
| - getConnection().removeBreakpoint(bp.getIsolate(), bp);
|
| + connection.removeBreakpoint(bp.getIsolate(), bp);
|
| }
|
| } catch (IOException exception) {
|
| DartDebugCorePlugin.logError(exception);
|
| @@ -173,7 +177,6 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| return false;
|
| }
|
| // prepare line (requires lines table)
|
| - VmConnection connection = getConnection();
|
| int locationLine = location.getLineNumber(connection);
|
| // check every breakpoint's line + file
|
| for (IBreakpoint _bp : createdBreakpoints.keySet()) {
|
| @@ -194,6 +197,26 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| return false;
|
| }
|
|
|
| + public void setPauseOnExceptionForLiveIsolates() {
|
| + BreakOnExceptionsType pauseType = getPauseType();
|
| + for (VmIsolate isolate : liveIsolates) {
|
| + try {
|
| + connection.setPauseOnException(isolate, pauseType);
|
| + } catch (IOException e) {
|
| + DartDebugCorePlugin.logError(e);
|
| + }
|
| + }
|
| + }
|
| +
|
| + public void setPauseOnExceptionSync(VmIsolate isolate) {
|
| + BreakOnExceptionsType pauseType = getPauseType();
|
| + try {
|
| + connection.setPauseOnExceptionSync(isolate, pauseType);
|
| + } catch (IOException e) {
|
| + DartDebugCorePlugin.logError(e);
|
| + }
|
| + }
|
| +
|
| protected void addCreatedBreakpoint(DartBreakpoint breakpoint, VmBreakpoint result) {
|
| List<VmBreakpoint> breakpoints = createdBreakpoints.get(breakpoint);
|
| if (breakpoints == null) {
|
| @@ -220,7 +243,7 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| DartBreakpoint dartBreakpoint = getDartBreakpointFor(bp);
|
|
|
| if (dartBreakpoint != null && isolate == mainIsolate) {
|
| - int lineNo = bp.getLocation().getLineNumber(getConnection());
|
| + int lineNo = bp.getLocation().getLineNumber(connection);
|
|
|
| if (lineNo != dartBreakpoint.getLine()) {
|
| ignoredBreakpoints.add(dartBreakpoint);
|
| @@ -268,8 +291,8 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| }
|
|
|
| try {
|
| - VmInterruptResult interruptResult = pause ? getConnection().interruptConditionally(isolate)
|
| - : VmInterruptResult.createNoopResult(getConnection());
|
| + VmInterruptResult interruptResult = pause ? connection.interruptConditionally(isolate)
|
| + : VmInterruptResult.createNoopResult(connection);
|
|
|
| for (DartBreakpoint breakpoint : breakpoints) {
|
| if (breakpoint.isBreakpointEnabled()) {
|
| @@ -301,9 +324,9 @@ class ServerBreakpointManager implements IBreakpointListener {
|
|
|
| private void connectToIsolate(VmIsolate isolate) {
|
| try {
|
| - VmInterruptResult interruptResult = getConnection().interruptConditionally(isolate);
|
| + VmInterruptResult interruptResult = connection.interruptConditionally(isolate);
|
|
|
| - getConnection().enableAllSteppingSync(isolate);
|
| + connection.enableAllSteppingSync(isolate);
|
|
|
| // Set all existing breakpoints on the new isolate.
|
| addBreakpoints(isolate, getSupportedBreakpoints(), false);
|
| @@ -330,10 +353,6 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| return new File(filePath).toURI().toString();
|
| }
|
|
|
| - private VmConnection getConnection() {
|
| - return target.getConnection();
|
| - }
|
| -
|
| private String getPackagesUrlForFilePath(String filePath) {
|
| File javaFile = new File(filePath);
|
| IFile resourceFile = ResourceUtil.getFile(javaFile);
|
| @@ -373,6 +392,19 @@ class ServerBreakpointManager implements IBreakpointListener {
|
| return null;
|
| }
|
|
|
| + private BreakOnExceptionsType getPauseType() {
|
| + BreakOnExceptions boe = DartDebugCorePlugin.getPlugin().getBreakOnExceptions();
|
| + BreakOnExceptionsType pauseType = BreakOnExceptionsType.none;
|
| +
|
| + if (boe == BreakOnExceptions.uncaught) {
|
| + pauseType = BreakOnExceptionsType.unhandled;
|
| + } else if (boe == BreakOnExceptions.all) {
|
| + pauseType = BreakOnExceptionsType.all;
|
| + }
|
| +
|
| + return pauseType;
|
| + }
|
| +
|
| private boolean supportsBreakpoint(IBreakpoint breakpoint) {
|
| return target.supportsBreakpoint(breakpoint);
|
| }
|
|
|