| 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 f1e49cb6642bd078657148b1209d2ed4a06902d1..76c2e0b368a6bda2975e49c32c1046cdcabe7a25 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 | 
| @@ -15,6 +15,7 @@ | 
| 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.breakpoints.DartBreakpoint; | 
|  | 
| @@ -34,6 +35,7 @@ import java.util.Iterator; | 
| import java.util.List; | 
| import java.util.Map; | 
| import java.util.Map.Entry; | 
| +import java.util.concurrent.atomic.AtomicInteger; | 
|  | 
| // TODO: handle removing deleted breakpoints | 
|  | 
| @@ -41,6 +43,45 @@ import java.util.Map.Entry; | 
| * This breakpoint manager serves to off-load some of the breakpoint logic from ServerDebugTarget. | 
| */ | 
| class ServerBreakpointManager implements IBreakpointListener { | 
| +  private class SetBreakpointHelper { | 
| +    final int NUM_URLS = 2; | 
| + | 
| +    final VmIsolate isolate; | 
| +    final DartBreakpoint breakpoint; | 
| +    final int line; | 
| +    final AtomicInteger numErrors = new AtomicInteger(); | 
| + | 
| +    public SetBreakpointHelper(VmIsolate isolate, DartBreakpoint breakpoint, int line) { | 
| +      this.isolate = isolate; | 
| +      this.breakpoint = breakpoint; | 
| +      this.line = line; | 
| +    } | 
| + | 
| +    void setBreakpoint(String url) throws IOException { | 
| +      // fail if no URL | 
| +      if (url == null) { | 
| +        if (numErrors.incrementAndGet() == NUM_URLS) { | 
| +          target.writeToStdout("No valid URL for: " + breakpoint); | 
| +        } | 
| +        return; | 
| +      } | 
| +      // try to set | 
| +      getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() { | 
| +        @Override | 
| +        public void handleResult(VmResult<VmBreakpoint> result) { | 
| +          if (result.isError()) { | 
| +            if (numErrors.incrementAndGet() == NUM_URLS) { | 
| +              String error = result.getError(); | 
| +              target.writeToStdout(error); | 
| +            } | 
| +          } else { | 
| +            addCreatedBreakpoint(breakpoint, result.getResult()); | 
| +          } | 
| +        } | 
| +      }); | 
| +    } | 
| +  } | 
| + | 
| private ServerDebugTarget target; | 
|  | 
| private VmIsolate mainIsolate; | 
| @@ -230,41 +271,24 @@ class ServerBreakpointManager implements IBreakpointListener { | 
| VmInterruptResult interruptResult = pause ? getConnection().interruptConditionally(isolate) | 
| : VmInterruptResult.createNoopResult(getConnection()); | 
|  | 
| -      for (final DartBreakpoint breakpoint : breakpoints) { | 
| +      for (DartBreakpoint breakpoint : breakpoints) { | 
| if (breakpoint.isBreakpointEnabled()) { | 
| -          IFile file = breakpoint.getFile(); | 
| -          String url = null; | 
| - | 
| -          if (file != null) { | 
| -            url = getAbsoluteUrlForResource(file); | 
| -          } | 
| - | 
| int line = breakpoint.getLine(); | 
| - | 
| -          if (url != null) { | 
| -            getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() { | 
| -              @Override | 
| -              public void handleResult(VmResult<VmBreakpoint> result) { | 
| -                if (!result.isError()) { | 
| -                  addCreatedBreakpoint(breakpoint, result.getResult()); | 
| -                } | 
| -              } | 
| -            }); | 
| +          SetBreakpointHelper helper = new SetBreakpointHelper(isolate, breakpoint, line); | 
| +          // file path | 
| +          String filePath = breakpoint.getActualFilePath(); | 
| +          if (filePath == null) { | 
| +            continue; | 
| } | 
| - | 
| -          if (file != null) { | 
| -            url = getPackagesUrlForResource(file); | 
| +          // try package: URL | 
| +          { | 
| +            String url = getPackagesUrlForFilePath(filePath); | 
| +            helper.setBreakpoint(url); | 
| } | 
| - | 
| -          if (url != null) { | 
| -            getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() { | 
| -              @Override | 
| -              public void handleResult(VmResult<VmBreakpoint> result) { | 
| -                if (!result.isError()) { | 
| -                  addCreatedBreakpoint(breakpoint, result.getResult()); | 
| -                } | 
| -              } | 
| -            }); | 
| +          // try file:// URL | 
| +          { | 
| +            String url = getAbsoluteUrlForFilePath(filePath); | 
| +            helper.setBreakpoint(url); | 
| } | 
| } | 
| } | 
| @@ -302,16 +326,21 @@ class ServerBreakpointManager implements IBreakpointListener { | 
| } | 
| } | 
|  | 
| -  private String getAbsoluteUrlForResource(IFile file) { | 
| -    return file.getLocation().toFile().toURI().toString(); | 
| +  private String getAbsoluteUrlForFilePath(String filePath) { | 
| +    return new File(filePath).toURI().toString(); | 
| } | 
|  | 
| private VmConnection getConnection() { | 
| return target.getConnection(); | 
| } | 
|  | 
| -  private String getPackagesUrlForResource(IFile file) { | 
| -    String locationUrl = file.getLocation().toFile().toURI().toString(); | 
| +  private String getPackagesUrlForFilePath(String filePath) { | 
| +    File javaFile = new File(filePath); | 
| +    IFile resourceFile = ResourceUtil.getFile(javaFile); | 
| +    if (resourceFile == null) { | 
| +      return null; | 
| +    } | 
| +    String locationUrl = resourceFile.getLocation().toFile().toURI().toString(); | 
|  | 
| int index = locationUrl.indexOf(DartCore.PACKAGES_DIRECTORY_URL); | 
|  | 
| @@ -325,12 +354,12 @@ class ServerBreakpointManager implements IBreakpointListener { | 
| index = locationUrl.lastIndexOf(DartCore.LIB_URL_PATH); | 
|  | 
| if (index != -1) { | 
| -      String path = file.getLocation().toString(); | 
| +      String path = resourceFile.getLocation().toString(); | 
| path = path.substring(0, path.lastIndexOf(DartCore.LIB_URL_PATH)); | 
| File packagesDir = new File(path, DartCore.PACKAGES_DIRECTORY_NAME); | 
|  | 
| if (packagesDir.exists()) { | 
| -        String packageName = DartCore.getSelfLinkedPackageName(file); | 
| +        String packageName = DartCore.getSelfLinkedPackageName(resourceFile); | 
|  | 
| if (packageName != null) { | 
| locationUrl = DartCore.PACKAGE_SCHEME_SPEC + packageName + "/" | 
| @@ -347,5 +376,4 @@ class ServerBreakpointManager implements IBreakpointListener { | 
| private boolean supportsBreakpoint(IBreakpoint breakpoint) { | 
| return target.supportsBreakpoint(breakpoint); | 
| } | 
| - | 
| } | 
|  |