Chromium Code Reviews| Index: runtime/observatory/lib/src/elements/debugger.dart |
| diff --git a/runtime/observatory/lib/src/elements/debugger.dart b/runtime/observatory/lib/src/elements/debugger.dart |
| index ae16694e999cb2328fd0ad7af4ea1f9cf2751d9a..f15bbccea8751a62bb29ef8fba49411a91e08589 100644 |
| --- a/runtime/observatory/lib/src/elements/debugger.dart |
| +++ b/runtime/observatory/lib/src/elements/debugger.dart |
| @@ -637,7 +637,7 @@ class BreakCommand extends DebuggerCommand { |
| Future run(List<String> args) async { |
| if (args.length > 1) { |
| debugger.console.print('not implemented'); |
| - return new Future.value(null); |
| + return; |
| } |
| var arg = (args.length == 0 ? '' : args[0]); |
| var loc = await DebuggerLocation.parse(debugger, arg); |
| @@ -654,14 +654,14 @@ class BreakCommand extends DebuggerCommand { |
| } |
| } else { |
| assert(loc.script != null); |
| - if (loc.col != null) { |
| - // TODO(turnidge): Add tokenPos breakpoint support. |
| + var script = loc.script; |
| + if (loc.line < 1 || loc.line > script.lines.length) { |
| debugger.console.print( |
| - 'Ignoring column: ' |
| - 'adding breakpoint at a specific column not yet implemented'); |
| - } |
| + 'line number must be in range [1,${script.lines.length}]'); |
| + return; |
| + } |
| try { |
| - await debugger.isolate.addBreakpoint(loc.script, loc.line); |
| + await debugger.isolate.addBreakpoint(script, loc.line, loc.col); |
| } on ServerRpcException catch(e) { |
| if (e.code == ServerRpcException.kCannotAddBreakpoint) { |
| debugger.console.print('Unable to set breakpoint at ${loc}'); |
| @@ -718,48 +718,50 @@ class BreakCommand extends DebuggerCommand { |
| class ClearCommand extends DebuggerCommand { |
| ClearCommand(Debugger debugger) : super(debugger, 'clear', []); |
| - Future run(List<String> args) { |
| + Future run(List<String> args) async { |
| if (args.length > 1) { |
| debugger.console.print('not implemented'); |
| - return new Future.value(null); |
| + return; |
| } |
| var arg = (args.length == 0 ? '' : args[0]); |
| - return DebuggerLocation.parse(debugger, arg).then((loc) { |
| - if (loc.valid) { |
| - if (loc.function != null) { |
| - debugger.console.print( |
| - 'Ignoring breakpoint at $loc: ' |
| - 'Function entry breakpoints not yet implemented'); |
| - return null; |
| - } |
| - if (loc.col != null) { |
| - // TODO(turnidge): Add tokenPos clear support. |
| - debugger.console.print( |
| - 'Ignoring column: ' |
| - 'clearing breakpoint at a specific column not yet implemented'); |
| - } |
| + var loc = await DebuggerLocation.parse(debugger, arg); |
| + if (!loc.valid) { |
| + debugger.console.print(loc.errorMessage); |
| + return; |
| + } |
| + if (loc.function != null) { |
| + debugger.console.print( |
| + 'Ignoring breakpoint at $loc: ' |
| + 'Clearing function breakpoints not yet implemented'); |
| + return; |
| + } |
| - for (var bpt in debugger.isolate.breakpoints.values) { |
| - var script = bpt.location.script; |
| - if (script.id == loc.script.id) { |
| - assert(script.loaded); |
| - var line = script.tokenToLine(bpt.location.tokenPos); |
| - if (line == loc.line) { |
| - return debugger.isolate.removeBreakpoint(bpt).then((result) { |
| - if (result is DartError) { |
| - debugger.console.print( |
| - 'Unable to clear breakpoint at ${loc}: ${result.message}'); |
| - return; |
| - } |
| - }); |
| - } |
| + var script = loc.script; |
| + if (loc.line < 1 || loc.line > script.lines.length) { |
| + debugger.console.print( |
| + 'line number must be in range [1,${script.lines.length}]'); |
| + return; |
| + } |
| + var lineInfo = script.getLine(loc.line); |
| + var bpts = lineInfo.breakpoints; |
| + int bptFound = 0; |
|
rmacnak
2015/09/03 00:55:19
btpsFound = 0 or bptFound = false
turnidge
2015/09/04 18:05:29
Done.
var foundBreakpoint = false;
|
| + if (bpts != null) { |
| + var bptList = bpts.toList(); |
| + for (var bpt in bptList) { |
| + if (loc.col == null || |
| + loc.col == script.tokenToCol(bpt.location.tokenPos)) { |
| + bptFound++; |
| + var result = await debugger.isolate.removeBreakpoint(bpt); |
| + if (result is DartError) { |
| + debugger.console.print( |
| + 'Error clearing breakpoint ${bpt.number}: ${result.message}'); |
| } |
| } |
| - debugger.console.print('No breakpoint found at ${loc}'); |
| - } else { |
| - debugger.console.print(loc.errorMessage); |
| } |
| - }); |
| + } |
| + if (bptFound == 0) { |
| + debugger.console.print('No breakpoint found at ${loc}'); |
| + } |
| } |
| Future<List<String>> complete(List<String> args) { |