| 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 70d8516ff539f8d31408ccb54130f90c5090211f..ef0f62d2d794f3568d033cd64e8a5cb2b6350c0a 100644
|
| --- a/runtime/observatory/lib/src/elements/debugger.dart
|
| +++ b/runtime/observatory/lib/src/elements/debugger.dart
|
| @@ -366,6 +366,35 @@ class FinishCommand extends DebuggerCommand {
|
| 'Syntax: finish\n';
|
| }
|
|
|
| +class SetCommand extends DebuggerCommand {
|
| + SetCommand(Debugger debugger)
|
| + : super(debugger, 'set', []);
|
| +
|
| + Future run(List<String> args) async {
|
| + if (args.length == 2) {
|
| + var option = args[0].trim();
|
| + if (option == 'break-on-exceptions') {
|
| + var result = await debugger.isolate.setExceptionPauseInfo(args[1]);
|
| + if (result.isError) {
|
| + debugger.console.print(result.toString());
|
| + }
|
| + } else {
|
| + debugger.console.print("unknown option '$option'");
|
| + }
|
| + } else {
|
| + debugger.console.print("set expects 2 arguments");
|
| + }
|
| + }
|
| +
|
| + String helpShort =
|
| + 'Set a debugger option';
|
| +
|
| + String helpLong =
|
| + 'Set a debugger option'
|
| + '\n'
|
| + 'Syntax: set break-on-exceptions "all" | "none" | "unhandled"\n';
|
| +}
|
| +
|
| class BreakCommand extends DebuggerCommand {
|
| BreakCommand(Debugger debugger) : super(debugger, 'break', []);
|
|
|
| @@ -828,6 +857,7 @@ class ObservatoryDebugger extends Debugger {
|
| DebuggerConsoleElement console;
|
| DebuggerStackElement stackElement;
|
| ServiceMap stack;
|
| + String exceptions = "none"; // Last known setting.
|
|
|
| int get currentFrame => _currentFrame;
|
| void set currentFrame(int value) {
|
| @@ -856,6 +886,7 @@ class ObservatoryDebugger extends Debugger {
|
| new StepCommand(this),
|
| new FinishCommand(this),
|
| new BreakCommand(this),
|
| + new SetCommand(this),
|
| new ClearCommand(this),
|
| new DeleteCommand(this),
|
| new InfoCommand(this),
|
| @@ -869,6 +900,11 @@ class ObservatoryDebugger extends Debugger {
|
| void updateIsolate(Isolate iso) {
|
| _isolate = iso;
|
| if (_isolate != null) {
|
| + if (exceptions != iso.exceptionsPauseInfo) {
|
| + exceptions = iso.exceptionsPauseInfo;
|
| + console.print("Now pausing for $exceptions exceptions");
|
| + }
|
| +
|
| _isolate.reload().then((response) {
|
| // TODO(turnidge): Currently the debugger relies on all libs
|
| // being loaded. Fix this.
|
| @@ -992,9 +1028,12 @@ class ObservatoryDebugger extends Debugger {
|
| console.print('Paused at breakpoint ${bpId} at '
|
| '${script.name}:${line}:${col}');
|
| } else if (event.exception != null) {
|
| - // TODO(turnidge): Test this.
|
| - console.print('Paused due to exception ${event.exception} at '
|
| + console.print('Paused due to exception at '
|
| '${script.name}:${line}:${col}');
|
| + // This seems to be missing if we are paused-at-exception after
|
| + // paused-at-isolate-exit. Maybe we shutdown part of the debugger too
|
| + // soon?
|
| + console.printRef(event.exception);
|
| } else {
|
| console.print('Paused at ${script.name}:${line}:${col}');
|
| }
|
| @@ -1056,6 +1095,13 @@ class ObservatoryDebugger extends Debugger {
|
| }
|
| break;
|
|
|
| + case ServiceEvent.kDebuggerSettingsUpdate:
|
| + if (exceptions != event.exceptions) {
|
| + exceptions = event.exceptions;
|
| + console.print("Now pausing for $exceptions exceptions");
|
| + }
|
| + break;
|
| +
|
| case ServiceEvent.kIsolateUpdate:
|
| var iso = event.owner;
|
| console.print("Isolate ${iso.number} renamed to '${iso.name}'");
|
|
|