Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Unified Diff: runtime/observatory/lib/src/elements/debugger.dart

Issue 1120133002: Rework error handling in the service protocol and in Observatory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix tests Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 b0efa0f9a32491643fd6f7439d9dbfefcd975638..c9be5ec4d9616e95379a383de2722b916766f38e 100644
--- a/runtime/observatory/lib/src/elements/debugger.dart
+++ b/runtime/observatory/lib/src/elements/debugger.dart
@@ -117,13 +117,13 @@ class PrintCommand extends DebuggerCommand {
}
var expr = args.join('');
return debugger.isolate.evalFrame(debugger.currentFrame, expr)
- .then((response) {
- if (response is DartError) {
- debugger.console.print(response.message);
- } else {
- debugger.console.print('= ', newline:false);
- debugger.console.printRef(response);
- }
+ .then((ServiceObject response) {
+ if (response is DartError) {
+ debugger.console.print(response.message);
+ } else {
+ debugger.console.print('= ', newline:false);
+ debugger.console.printRef(response);
+ }
});
}
@@ -369,43 +369,45 @@ class FinishCommand extends DebuggerCommand {
class BreakCommand extends DebuggerCommand {
BreakCommand(Debugger debugger) : super(debugger, 'break', []);
- 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);
}
var arg = (args.length == 0 ? '' : args[0]);
- return SourceLocation.parse(debugger, arg).then((loc) {
- if (loc.valid) {
- if (loc.function != null) {
- return debugger.isolate.addBreakpointAtEntry(loc.function)
- .then((result) => _handleBreakpointResult(loc, result));
- } else {
- assert(loc.script != null);
- if (loc.col != null) {
- // TODO(turnidge): Add tokenPos breakpoint support.
- debugger.console.print(
- 'Ignoring column: '
- 'adding breakpoint at a specific column not yet implemented');
+ var loc = await SourceLocation.parse(debugger, arg);
+ if (loc.valid) {
+ if (loc.function != null) {
+ try {
+ await debugger.isolate.addBreakpointAtEntry(loc.function);
+ } on ServerRpcException catch(e) {
+ if (e.code == ServerRpcException.kNoBreakAtFunction) {
+ debugger.console.print('Unable to set breakpoint at ${loc}');
+ } else {
+ rethrow;
}
- return debugger.isolate.addBreakpoint(loc.script, loc.line)
- .then((result) => _handleBreakpointResult(loc, result));
}
} else {
- debugger.console.print(loc.errorMessage);
+ assert(loc.script != null);
+ if (loc.col != null) {
+ // TODO(turnidge): Add tokenPos breakpoint support.
+ debugger.console.print(
+ 'Ignoring column: '
+ 'adding breakpoint at a specific column not yet implemented');
+ }
+ try {
+ await debugger.isolate.addBreakpoint(loc.script, loc.line);
+ } on ServerRpcException catch(e) {
+ if (e.code == ServerRpcException.kNoBreakAtLine) {
+ debugger.console.print('Unable to set breakpoint at ${loc}');
+ } else {
+ rethrow;
+ }
+ }
}
- });
- }
-
- Future _handleBreakpointResult(loc, result) {
- if (result is DartError) {
- debugger.console.print('Unable to set breakpoint at ${loc}');
} else {
- // TODO(turnidge): Adding a duplicate breakpoint is
- // currently ignored. May want to change the protocol to
- // inform us when this happens.
+ debugger.console.print(loc.errorMessage);
}
- return new Future.value(null);
}
Future<List<String>> complete(List<String> args) {
@@ -968,6 +970,7 @@ class ObservatoryDebugger extends Debugger {
} else {
console.print('Isolate is in unknown state');
}
+ warnOutOfDate();
}
void _reportPause(ServiceEvent event) {
@@ -986,11 +989,12 @@ class ObservatoryDebugger extends Debugger {
var col = script.tokenToCol(frame['tokenPos']);
if (event.breakpoint != null) {
var bpId = event.breakpoint.number;
- console.print('Breakpoint ${bpId} at ${script.name}:${line}:${col}');
+ console.print('Paused at breakpoint ${bpId} at '
+ '${script.name}:${line}:${col}');
} else if (event.exception != null) {
// TODO(turnidge): Test this.
- console.print(
- 'Exception ${event.exception} at ${script.name}:${line}:${col}');
+ console.print('Paused due to exception ${event.exception} at '
+ '${script.name}:${line}:${col}');
} else {
console.print('Paused at ${script.name}:${line}:${col}');
}
@@ -1145,7 +1149,16 @@ class ObservatoryDebugger extends Debugger {
return cmd.runCommand(command).then((_) {
lastCommand = command;
}).catchError((e, s) {
- console.print('ERROR $e\n$s');
+ if (e is NetworkRpcException) {
+ console.printRed('Unable to execute command because the connection '
+ 'to the VM has been closed');
+ } else {
+ if (s != null) {
+ console.printRed('Internal error: $e\n$s');
+ } else {
+ console.printRed('Internal error: $e\n');
+ }
+ }
});
}
@@ -1351,7 +1364,7 @@ class DebuggerStackElement extends ObservatoryElement {
return s;
}
- doPauseIsolate(_) {
+ Future doPauseIsolate() {
if (debugger != null) {
return debugger.isolate.pause();
} else {
@@ -1359,7 +1372,7 @@ class DebuggerStackElement extends ObservatoryElement {
}
}
- doRefreshStack(_) {
+ Future doRefreshStack() {
if (debugger != null) {
return debugger.refreshStack();
} else {
@@ -1572,6 +1585,17 @@ class DebuggerConsoleElement extends ObservatoryElement {
span.scrollIntoView();
}
+ void printRed(String line, { bool newline:true }) {
+ var span = new SpanElement();
+ span.classes.add('red');
+ span.appendText(line);
+ if (newline) {
+ span.appendText('\n');
+ }
+ $['consoleText'].children.add(span);
+ span.scrollIntoView();
+ }
+
void printRef(Instance ref, { bool newline:true }) {
var refElement = new Element.tag('instance-ref');
refElement.ref = ref;
« no previous file with comments | « runtime/observatory/lib/src/elements/css/shared.css ('k') | runtime/observatory/lib/src/elements/debugger.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698