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

Side by Side Diff: tools/ddbg.dart

Issue 11028040: - Add support to interrupt a running isolate (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« runtime/vm/debugger.cc ('K') | « runtime/vm/debugger_api_impl_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // Simple interactive debugger shell that connects to the Dart VM's debugger 5 // Simple interactive debugger shell that connects to the Dart VM's debugger
6 // connection port. 6 // connection port.
7 7
8 #import("dart:io"); 8 #import("dart:io");
9 #import("dart:json"); 9 #import("dart:json");
10 #import("dart:math", prefix: "Math"); 10 #import("dart:math", prefix: "Math");
(...skipping 30 matching lines...) Expand all
41 po <id> Print object info for given id 41 po <id> Print object info for given id
42 pl <id> <idx> [<len>] Print list element/slice 42 pl <id> <idx> [<len>] Print list element/slice
43 pc <id> Print class info for given id 43 pc <id> Print class info for given id
44 ll List loaded libraries 44 ll List loaded libraries
45 plib <id> Print library info for given library id 45 plib <id> Print library info for given library id
46 slib <id> <true|false> Set library id debuggable 46 slib <id> <true|false> Set library id debuggable
47 pg <id> Print all global variables visible within given library id 47 pg <id> Print all global variables visible within given library id
48 ls <lib_id> List loaded scripts in library 48 ls <lib_id> List loaded scripts in library
49 gs <lib_id> <script_url> Get source text of script in library 49 gs <lib_id> <script_url> Get source text of script in library
50 epi <none|all|unhandled> Set exception pause info 50 epi <none|all|unhandled> Set exception pause info
51 i <id> Interrupt execution of given isolate id
hausner 2012/10/05 18:06:34 Don't you also want/need a command to list isolate
siva 2012/10/05 22:35:06 Yes, but I haven't added that yet. That is the nex
51 h Print help 52 h Print help
52 """); 53 """);
53 } 54 }
54 55
55 56
56 void quitShell() { 57 void quitShell() {
57 vmStream.close(); 58 vmStream.close();
58 vmSock.close(); 59 vmSock.close();
59 stdin.close(); 60 stdin.close();
60 } 61 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 sendCmd(cmd).then((result) => handleGetGlobalVarsResponse(result)); 151 sendCmd(cmd).then((result) => handleGetGlobalVarsResponse(result));
151 } else if (command == "gs" && args.length == 3) { 152 } else if (command == "gs" && args.length == 3) {
152 var cmd = { "id": seqNum, "command": "getScriptSource", 153 var cmd = { "id": seqNum, "command": "getScriptSource",
153 "params": { "libraryId": Math.parseInt(args[1]), 154 "params": { "libraryId": Math.parseInt(args[1]),
154 "url": args[2] }}; 155 "url": args[2] }};
155 sendCmd(cmd).then((result) => handleGetSourceResponse(result)); 156 sendCmd(cmd).then((result) => handleGetSourceResponse(result));
156 } else if (command == "epi" && args.length == 2) { 157 } else if (command == "epi" && args.length == 2) {
157 var cmd = { "id": seqNum, "command": "setPauseOnException", 158 var cmd = { "id": seqNum, "command": "setPauseOnException",
158 "params": { "exceptions": args[1] }}; 159 "params": { "exceptions": args[1] }};
159 sendCmd(cmd).then((result) => handleGenericResponse(result)); 160 sendCmd(cmd).then((result) => handleGenericResponse(result));
161 } else if (command == "i" && args.length == 2) {
162 var cmd = { "id": seqNum, "command": "interrupt",
163 "params": {"isolateId": Math.parseInt(args[1]) }};
164 sendCmd(cmd).then((result) => handleGenericResponse(result));
160 } else if (command == "q") { 165 } else if (command == "q") {
161 quitShell(); 166 quitShell();
162 } else if (command == "h") { 167 } else if (command == "h") {
163 printHelp(); 168 printHelp();
164 } else { 169 } else {
165 print("command '$command' not understood, try h for help"); 170 print("command '$command' not understood, try h for help");
166 } 171 }
167 } 172 }
168 173
169 174
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 void printStackTrace(List frames) { 354 void printStackTrace(List frames) {
350 for (int i = 0; i < frames.length; i++) { 355 for (int i = 0; i < frames.length; i++) {
351 printStackFrame(i, frames[i]); 356 printStackFrame(i, frames[i]);
352 } 357 }
353 } 358 }
354 359
355 360
356 void handlePausedEvent(msg) { 361 void handlePausedEvent(msg) {
357 assert(msg["params"] != null); 362 assert(msg["params"] != null);
358 var reason = msg["params"]["reason"]; 363 var reason = msg["params"]["reason"];
364 var id = msg["params"]["id"];
359 stackTrace = msg["params"]["callFrames"]; 365 stackTrace = msg["params"]["callFrames"];
360 assert(stackTrace != null); 366 assert(stackTrace != null);
361 assert(stackTrace.length >= 1); 367 assert(stackTrace.length >= 1);
362 curFrame = stackTrace[0]; 368 curFrame = stackTrace[0];
363 if (reason == "breakpoint") { 369 if (reason == "breakpoint") {
364 print("VM paused on breakpoint"); 370 print("Isolate $id paused on breakpoint");
371 } else if (reason == "interrupted") {
372 print("Isolate $id paused due to an interrupt");
365 } else { 373 } else {
366 assert(reason == "exception"); 374 assert(reason == "exception");
367 var excObj = msg["params"]["exception"]; 375 var excObj = msg["params"]["exception"];
368 print("VM paused on exception"); 376 print("Isolate $id paused on exception");
369 print(remoteObject(excObj)); 377 print(remoteObject(excObj));
370 } 378 }
371 print("Stack trace:"); 379 print("Stack trace:");
372 printStackTrace(stackTrace); 380 printStackTrace(stackTrace);
373 } 381 }
374 382
375 383
376 void processVmMessage(String json) { 384 void processVmMessage(String json) {
377 var msg = JSON.parse(json); 385 var msg = JSON.parse(json);
378 if (msg == null) { 386 if (msg == null) {
379 return; 387 return;
380 } 388 }
381 var event = msg["event"]; 389 var event = msg["event"];
382 if (event == "paused") { 390 if (event == "paused") {
383 handlePausedEvent(msg); 391 handlePausedEvent(msg);
384 return; 392 return;
385 } 393 }
386 if (event == "breakpointResolved") { 394 if (event == "breakpointResolved") {
387 Map params = msg["params"]; 395 Map params = msg["params"];
388 assert(params != null); 396 assert(params != null);
389 print("BP ${params["breakpointId"]} resolved and " 397 print("BP ${params["breakpointId"]} resolved and "
390 "set at line ${params["line"]}."); 398 "set at line ${params["line"]}.");
391 return; 399 return;
392 } 400 }
401 if (event == "isolate") {
402 Map params = msg["params"];
403 assert(params != null);
404 print("Isolate ${params["id"]} has been ${params["reason"]}.");
405 return;
406 }
393 if (msg["id"] != null) { 407 if (msg["id"] != null) {
394 var id = msg["id"]; 408 var id = msg["id"];
395 if (outstandingCommands.containsKey(id)) { 409 if (outstandingCommands.containsKey(id)) {
396 if (msg["error"] != null) { 410 if (msg["error"] != null) {
397 print("VM says: ${msg["error"]}"); 411 print("VM says: ${msg["error"]}");
398 } else { 412 } else {
399 var completer = outstandingCommands[id]; 413 var completer = outstandingCommands[id];
400 completer.complete(msg); 414 completer.complete(msg);
401 } 415 }
402 outstandingCommands.remove(id); 416 outstandingCommands.remove(id);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 }; 511 };
498 vmInStream.onError = (err) { 512 vmInStream.onError = (err) {
499 print("Error in debug connection: $err"); 513 print("Error in debug connection: $err");
500 quitShell(); 514 quitShell();
501 }; 515 };
502 vmInStream.onClosed = () { 516 vmInStream.onClosed = () {
503 print("VM debugger connection closed"); 517 print("VM debugger connection closed");
504 quitShell(); 518 quitShell();
505 }; 519 };
506 } 520 }
OLDNEW
« runtime/vm/debugger.cc ('K') | « runtime/vm/debugger_api_impl_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698