| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 // This test forks a second vm process that runs a dart script as | 5 // This test forks a second vm process that runs a dart script as |
| 6 // a debug target, single stepping through the entire program, and | 6 // a debug target, single stepping through the entire program, and |
| 7 // recording each breakpoint. At the end, a coverage map of the source | 7 // recording each breakpoint. At the end, a coverage map of the source |
| 8 // is printed. | 8 // is printed. |
| 9 // | 9 // |
| 10 // Usage: dart coverage.dart [--wire] [--verbose] target_script.dart | 10 // Usage: dart coverage.dart [--wire] [--verbose] target_script.dart |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 bool shutdownEventSeen = false; | 207 bool shutdownEventSeen = false; |
| 208 int isolateId = 0; | 208 int isolateId = 0; |
| 209 int libraryId = null; | 209 int libraryId = null; |
| 210 | 210 |
| 211 int nextMessageId = 0; | 211 int nextMessageId = 0; |
| 212 bool isPaused = false; | 212 bool isPaused = false; |
| 213 bool pendingAck = false; | 213 bool pendingAck = false; |
| 214 | 214 |
| 215 Debugger(this.targetProcess) { | 215 Debugger(this.targetProcess) { |
| 216 var stdoutStringStream = targetProcess.stdout | 216 var stdoutStringStream = targetProcess.stdout |
| 217 .transform(new StringDecoder()) | 217 .transform(UTF8.decoder) |
| 218 .transform(new LineSplitter()); | 218 .transform(new LineSplitter()); |
| 219 stdoutStringStream.listen((line) { | 219 stdoutStringStream.listen((line) { |
| 220 if (showDebuggeeOutput) { | 220 if (showDebuggeeOutput) { |
| 221 print("TARG: $line"); | 221 print("TARG: $line"); |
| 222 } | 222 } |
| 223 if (line.startsWith("Debugger listening")) { | 223 if (line.startsWith("Debugger listening")) { |
| 224 RegExp portExpr = new RegExp(r"\d+"); | 224 RegExp portExpr = new RegExp(r"\d+"); |
| 225 var port = portExpr.stringMatch(line); | 225 var port = portExpr.stringMatch(line); |
| 226 var pid = targetProcess.pid; | 226 var pid = targetProcess.pid; |
| 227 print("Coverage target process (pid $pid) found " | 227 print("Coverage target process (pid $pid) found " |
| 228 "listening on port $port."); | 228 "listening on port $port."); |
| 229 openConnection(int.parse(port)); | 229 openConnection(int.parse(port)); |
| 230 } | 230 } |
| 231 }); | 231 }); |
| 232 | 232 |
| 233 var stderrStringStream = targetProcess.stderr | 233 var stderrStringStream = targetProcess.stderr |
| 234 .transform(new StringDecoder()) | 234 .transform(UTF8.decoder) |
| 235 .transform(new LineSplitter()); | 235 .transform(new LineSplitter()); |
| 236 stderrStringStream.listen((line) { | 236 stderrStringStream.listen((line) { |
| 237 if (showDebuggeeOutput) { | 237 if (showDebuggeeOutput) { |
| 238 print("TARG: $line"); | 238 print("TARG: $line"); |
| 239 } | 239 } |
| 240 }); | 240 }); |
| 241 } | 241 } |
| 242 | 242 |
| 243 // Handle debugger events, updating the debugger state. | 243 // Handle debugger events, updating the debugger state. |
| 244 void handleEvent(Map<String,dynamic> msg) { | 244 void handleEvent(Map<String,dynamic> msg) { |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 365 |
| 366 // Record error message. | 366 // Record error message. |
| 367 void error(String s) { | 367 void error(String s) { |
| 368 errors.add(s); | 368 errors.add(s); |
| 369 } | 369 } |
| 370 | 370 |
| 371 void openConnection(int portNumber) { | 371 void openConnection(int portNumber) { |
| 372 Socket.connect("127.0.0.1", portNumber).then((s) { | 372 Socket.connect("127.0.0.1", portNumber).then((s) { |
| 373 socket = s; | 373 socket = s; |
| 374 socket.setOption(SocketOption.TCP_NODELAY, true); | 374 socket.setOption(SocketOption.TCP_NODELAY, true); |
| 375 var stringStream = socket.transform(new StringDecoder()); | 375 var stringStream = socket.transform(UTF8.decoder); |
| 376 stringStream.listen( | 376 stringStream.listen( |
| 377 (str) { | 377 (str) { |
| 378 try { | 378 try { |
| 379 responses.append(str); | 379 responses.append(str); |
| 380 handleMessages(); | 380 handleMessages(); |
| 381 } catch(e, trace) { | 381 } catch(e, trace) { |
| 382 print("Unexpected exception:\n$e\n$trace"); | 382 print("Unexpected exception:\n$e\n$trace"); |
| 383 cleanup(); | 383 cleanup(); |
| 384 } | 384 } |
| 385 }, | 385 }, |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 540 targetOpts.add(str); | 540 targetOpts.add(str); |
| 541 break; | 541 break; |
| 542 } | 542 } |
| 543 } | 543 } |
| 544 | 544 |
| 545 Process.start(options.executable, targetOpts).then((Process process) { | 545 Process.start(options.executable, targetOpts).then((Process process) { |
| 546 process.stdin.close(); | 546 process.stdin.close(); |
| 547 debugger = new Debugger(process); | 547 debugger = new Debugger(process); |
| 548 }); | 548 }); |
| 549 } | 549 } |
| OLD | NEW |