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

Unified Diff: tools/ddbg_service/lib/debugger.dart

Issue 1497033003: - Remove the legacy debug protocol. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review comments. Created 5 years 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
« no previous file with comments | « tools/ddbg_service/lib/commando.dart ('k') | tools/ddbg_service/lib/terminfo.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/ddbg_service/lib/debugger.dart
diff --git a/tools/ddbg_service/lib/debugger.dart b/tools/ddbg_service/lib/debugger.dart
deleted file mode 100644
index 0a041614c772826bcbf6b2c50757bcf86bd448dc..0000000000000000000000000000000000000000
--- a/tools/ddbg_service/lib/debugger.dart
+++ /dev/null
@@ -1,478 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library debugger;
-
-import "dart:async";
-import "dart:io";
-
-import "package:ddbg/commando.dart";
-import "package:observatory/service_io.dart";
-
-class Debugger {
- Commando cmdo;
- var _cmdoSubscription;
-
- CommandList _commands;
-
- VM _vm;
- VM get vm => _vm;
- set vm(VM vm) {
- if (_vm == vm) {
- // Do nothing.
- return;
- }
- if (_vm != null) {
- _vm.disconnect();
- }
- if (vm != null) {
- vm.onConnect.then(_vmConnected);
- vm.onDisconnect.then(_vmDisconnected);
- vm.errors.stream.listen(_onServiceError);
- vm.exceptions.stream.listen(_onServiceException);
- vm.events.stream.listen(_onServiceEvent);
- }
- _vm = vm;
- }
-
- _vmConnected(VM vm) {
- cmdo.print('Connected to vm');
- }
-
- _vmDisconnected(VM vm) {
- cmdo.print('Disconnected from vm');
- }
-
- _onServiceError(ServiceError error) {
- cmdo.print('error $error');
- }
-
- _onServiceException(ServiceException exception) {
- cmdo.print('${exception.message}');
- }
-
- _onServiceEvent(ServiceEvent event) {
- switch (event.eventType) {
- case 'GC':
- // Ignore GC events for now.
- break;
- default:
- cmdo.print('event $event');
- break;
- }
- }
-
- VM _isolate;
- VM get isolate => _isolate;
- set isolate(Isolate isolate) {
- _isolate = isolate;
- cmdo.print('Current isolate is now isolate ${getIsolateIndex(_isolate)}');
- }
-
- Map _isolateIndexMap = new Map();
- int _nextIsolateIndex = 0;
- int getIsolateIndex(Isolate isolate) {
- var index = _isolateIndexMap[isolate.id];
- if (index == null) {
- index = _nextIsolateIndex++;
- _isolateIndexMap[isolate.id] = index;
- }
- return index;
- }
-
- void onUncaughtError(error, StackTrace trace) {
- if (error is ServiceException ||
- error is ServiceError) {
- // These are handled elsewhere. Ignore.
- return;
- }
- cmdo.print('\n--------\nExiting due to unexpected error:\n'
- ' $error\n$trace\n');
- quit();
- }
-
- Debugger() {
- cmdo = new Commando(completer: _completeCommand);
- _cmdoSubscription = cmdo.commands.listen(_processCommand,
- onError: _cmdoError,
- onDone: _cmdoDone);
- _commands = new CommandList();
- _commands.register(new AttachCommand());
- _commands.register(new DetachCommand());
- _commands.register(new HelpCommand(_commands));
- _commands.register(new IsolateCommand());
- _commands.register(new QuitCommand());
- }
-
- Future _closeCmdo() {
- var sub = _cmdoSubscription;
- _cmdoSubscription = null;
- cmdo = null;
-
- var future = sub.cancel();
- if (future != null) {
- return future;
- } else {
- return new Future.value();
- }
- }
-
- Future quit() {
- return Future.wait([_closeCmdo()]).then((_) {
- exit(0);
- });
- }
-
- void _cmdoError(error, StackTrace trace) {
- cmdo.print('\n--------\nExiting due to unexpected error:\n'
- ' $error\n$trace\n');
- quit();
- }
-
- void _cmdoDone() {
- quit();
- }
-
- List<String> _completeCommand(List<String> commandParts) {
- return _commands.complete(commandParts);
- }
-
- void _processCommand(String cmdLine) {
- void huh() {
- cmdo.print("'$cmdLine' not understood, try 'help' for help.");
- }
-
- cmdo.hide();
- cmdLine = cmdLine.trim();
- var args = cmdLine.split(' ');
- if (args.length == 0) {
- return;
- }
- var command = args[0];
- var matches = _commands.match(command, true);
- if (matches.length == 0) {
- huh();
- cmdo.show();
- } else if (matches.length == 1) {
- matches[0].run(this, args).then((_) {
- cmdo.show();
- });
- } else {
- var matchNames = matches.map((handler) => handler.name);
- cmdo.print("Ambiguous command '$command' : ${matchNames.toList()}");
- cmdo.show();
- }
- }
-
-}
-
-// Every debugger command extends this base class.
-abstract class Command {
- String get name;
- String get helpShort;
- void printHelp(Debugger debugger, List<String> args);
- Future run(Debugger debugger, List<String> args);
- List<String> complete(List<String> commandParts) {
- return ["$name ${commandParts.join(' ')}"];
-
- }
-}
-
-class AttachCommand extends Command {
- final name = 'attach';
- final helpShort = 'Attach to a running Dart VM';
- void printHelp(Debugger debugger, List<String> args) {
- debugger.cmdo.print('''
------ attach -----
-
-Attach to the Dart VM running at the indicated host:port. If no
-host:port is provided, attach to the VM running on the default port.
-
-Usage:
- attach
- attach <host:port>
-''');
- }
-
- Future run(Debugger debugger, List<String> args) {
- var cmdo = debugger.cmdo;
- if (args.length > 2) {
- cmdo.print('$name expects 0 or 1 arguments');
- return new Future.value();
- }
- String hostPort = 'localhost:8181';
- if (args.length > 1) {
- hostPort = args[1];
- }
-
- debugger.vm = new WebSocketVM(new WebSocketVMTarget('ws://${hostPort}/ws'));
- return debugger.vm.load().then((vm) {
- if (debugger.isolate == null) {
- for (var isolate in vm.isolates) {
- if (isolate.name == 'root') {
- debugger.isolate = isolate;
- }
- }
- }
- });
- }
-}
-
-class CommandList {
- List _commands = new List<Command>();
-
- void register(Command cmd) {
- _commands.add(cmd);
- }
-
- List<Command> match(String commandName, bool exactMatchWins) {
- var matches = [];
- for (var command in _commands) {
- if (command.name.startsWith(commandName)) {
- if (exactMatchWins && command.name == commandName) {
- // Exact match
- return [command];
- } else {
- matches.add(command);
- }
- }
- }
- return matches;
- }
-
- List<String> complete(List<String> commandParts) {
- var completions = new List<String>();
- String prefix = commandParts[0];
- for (var command in _commands) {
- if (command.name.startsWith(prefix)) {
- completions.addAll(command.complete(commandParts.sublist(1)));
- }
- }
- return completions;
- }
-
- void printHelp(Debugger debugger, List<String> args) {
- var cmdo = debugger.cmdo;
- if (args.length <= 1) {
- cmdo.print("\nDebugger commands:\n");
- for (var command in _commands) {
- cmdo.print(' ${command.name.padRight(11)} ${command.helpShort}');
- }
- cmdo.print("For more information about a particular command, type:\n\n"
- " help <command>\n");
-
- cmdo.print("Commands may be abbreviated: e.g. type 'h' for 'help.\n");
- } else {
- var commandName = args[1];
- var matches =match(commandName, true);
- if (matches.length == 0) {
- cmdo.print("Command '$commandName' not recognized. "
- "Try 'help' for a list of commands.");
- } else {
- for (var command in matches) {
- command.printHelp(debugger, args);
- }
- }
- }
- }
-}
-
-class DetachCommand extends Command {
- final name = 'detach';
- final helpShort = 'Detach from a running Dart VM';
- void printHelp(Debugger debugger, List<String> args) {
- debugger.cmdo.print('''
------ detach -----
-
-Detach from the Dart VM.
-
-Usage:
- detach
-''');
- }
-
- Future run(Debugger debugger, List<String> args) {
- var cmdo = debugger.cmdo;
- if (args.length > 1) {
- cmdo.print('$name expects no arguments');
- return new Future.value();
- }
- if (debugger.vm == null) {
- cmdo.print('No VM is attached');
- } else {
- debugger.vm = null;
- }
- return new Future.value();
- }
-}
-
-class HelpCommand extends Command {
- HelpCommand(this._commands);
- final CommandList _commands;
-
- final name = 'help';
- final helpShort = 'Show a list of debugger commands';
- void printHelp(Debugger debugger, List<String> args) {
- debugger.cmdo.print('''
------ help -----
-
-Show a list of debugger commands or get more information about a
-particular command.
-
-Usage:
- help
- help <command>
-''');
- }
-
- Future run(Debugger debugger, List<String> args) {
- _commands.printHelp(debugger, args);
- return new Future.value();
- }
-
- List<String> complete(List<String> commandParts) {
- if (commandParts.isEmpty) {
- return ['$name '];
- }
- return _commands.complete(commandParts).map((value) {
- return '$name $value';
- });
- }
-}
-
-class IsolateCommand extends Command {
- final name = 'isolate';
- final helpShort = 'Isolate control';
- void printHelp(Debugger debugger, List<String> args) {
- debugger.cmdo.print('''
------ isolate -----
-
-List all isolates.
-
-Usage:
- isolate
- isolate list
-
-Set current isolate.
-
-Usage:
- isolate <id>
-''');
- }
-
- Future run(Debugger debugger, List<String> args) {
- var cmdo = debugger.cmdo;
- if (args.length == 1 ||
- (args.length == 2 && args[1] == 'list')) {
- return _listIsolates(debugger);
- } else if (args.length == 2) {
- cmdo.print('UNIMPLEMENTED');
- return new Future.value();
- } else {
- if (args.length > 1) {
- cmdo.print('Unrecognized isolate command');
- printHelp(debugger, []);
- return new Future.value();
- }
- }
- }
-
- Future _listIsolates(Debugger debugger) {
- var cmdo = debugger.cmdo;
- if (debugger.vm == null) {
- cmdo.print('No VM is attached');
- return new Future.value();
- }
- return debugger.vm.reload().then((vm) {
- // Sort the isolates by their indices.
- var isolates = vm.isolates.toList();
- isolates.sort((iso1, iso2) {
- return (debugger.getIsolateIndex(iso1) -
- debugger.getIsolateIndex(iso2));
- });
-
- StringBuffer sb = new StringBuffer();
- cmdo.print(' ID NAME STATE');
- cmdo.print('-----------------------------------------------');
- for (var isolate in isolates) {
- if (isolate == debugger.isolate) {
- sb.write('* ');
- } else {
- sb.write(' ');
- }
- sb.write(debugger.getIsolateIndex(isolate).toString().padRight(8));
- sb.write(' ');
- sb.write(isolate.name.padRight(12));
- sb.write(' ');
- if (isolate.pauseEvent != null) {
- switch (isolate.pauseEvent.eventType) {
- case 'IsolateCreated':
- sb.write('paused at isolate start');
- break;
- case 'IsolateShutdown':
- sb.write('paused at isolate exit');
- break;
- case 'IsolateInterrupted':
- sb.write('paused');
- break;
- case 'BreakpointReached':
- sb.write('paused by breakpoint');
- break;
- case 'ExceptionThrown':
- sb.write('paused by exception');
- break;
- default:
- sb.write('paused by unknown cause');
- break;
- }
- } else if (isolate.running) {
- sb.write('running');
- } else if (isolate.idle) {
- sb.write('idle');
- } else if (isolate.loading) {
- // TODO(turnidge): This is weird in a command line debugger.
- sb.write('(not available)');
- }
- sb.write('\n');
- }
- cmdo.print(sb);
- });
- return new Future.value();
- }
-
- List<String> complete(List<String> commandParts) {
- if (commandParts.isEmpty) {
- return ['$name ${commandParts.join(" ")}'];
- } else {
- var completions = _commands.complete(commandParts);
- return completions.map((completion) {
- return '$name $completion';
- });
- }
- }
-}
-
-class QuitCommand extends Command {
- final name = 'quit';
- final helpShort = 'Quit the debugger.';
- void printHelp(Debugger debugger, List<String> args) {
- debugger.cmdo.print('''
------ quit -----
-
-Quit the debugger.
-
-Usage:
- quit
-''');
- }
-
- Future run(Debugger debugger, List<String> args) {
- var cmdo = debugger.cmdo;
- if (args.length > 1) {
- cmdo.print("Unexpected arguments to $name command.");
- return new Future.value();
- }
- return debugger.quit();
- }
-}
« no previous file with comments | « tools/ddbg_service/lib/commando.dart ('k') | tools/ddbg_service/lib/terminfo.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698