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

Side by Side Diff: runtime/observatory/test/debugging_test.dart

Issue 920313003: Implement function entry breakpoints in Observatory debugger. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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
« no previous file with comments | « runtime/observatory/lib/src/service/object.dart ('k') | runtime/vm/service.cc » ('j') | 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 import 'package:observatory/service_io.dart'; 5 import 'package:observatory/service_io.dart';
6 import 'package:unittest/unittest.dart'; 6 import 'package:unittest/unittest.dart';
7 import 'test_helper.dart'; 7 import 'test_helper.dart';
8 import 'dart:async'; 8 import 'dart:async';
9 9
10 void helper(i) {
11 print(i);
12 }
13
10 void testFunction() { 14 void testFunction() {
11 int i = 0; 15 int i = 0;
12 while (true) { 16 while (true) {
13 if (++i % 100000000 == 0) { 17 if (++i % 100000000 == 0) {
14 print(i); // line 14 18 helper(i); // line 18
15 } 19 }
16 } 20 }
17 } 21 }
18 22
19 var tests = [ 23 var tests = [
20 24
21 // Pause 25 // Pause
22 (Isolate isolate) { 26 (Isolate isolate) {
23 Completer completer = new Completer(); 27 Completer completer = new Completer();
24 isolate.vm.events.stream.listen((ServiceEvent event) { 28 isolate.vm.events.stream.listen((ServiceEvent event) {
(...skipping 11 matching lines...) Expand all
36 expect(isolate.pauseEvent == null, isTrue); 40 expect(isolate.pauseEvent == null, isTrue);
37 }); 41 });
38 }, 42 },
39 43
40 // Add breakpoint 44 // Add breakpoint
41 (Isolate isolate) { 45 (Isolate isolate) {
42 return isolate.rootLib.load().then((_) { 46 return isolate.rootLib.load().then((_) {
43 // Set up a listener to wait for breakpoint events. 47 // Set up a listener to wait for breakpoint events.
44 Completer completer = new Completer(); 48 Completer completer = new Completer();
45 List events = []; 49 List events = [];
46 isolate.vm.events.stream.listen((ServiceEvent event) { 50 var subscription;
51 subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
47 if (event.eventType.startsWith('Breakpoint')) { 52 if (event.eventType.startsWith('Breakpoint')) {
48 events.add(event); 53 events.add(event);
49 if (events.length == 2) { 54 if (events.length == 2) {
50 expect(events[0].eventType, equals('BreakpointResolved')); 55 expect(events[0].eventType, equals('BreakpointResolved'));
51 expect(events[1].eventType, equals('BreakpointReached')); 56 expect(events[1].eventType, equals('BreakpointReached'));
52 print('Breakpoint reached'); 57 print('Breakpoint reached');
58 subscription.cancel();
53 completer.complete(); 59 completer.complete();
54 } 60 }
55 } 61 }
56 }); 62 });
57 63
58 // Add the breakpoint. 64 // Add the breakpoint.
59 var script = isolate.rootLib.scripts[0]; 65 var script = isolate.rootLib.scripts[0];
60 return isolate.addBreakpoint(script, 14).then((result) { 66 return isolate.addBreakpoint(script, 18).then((result) {
61 expect(result is Breakpoint, isTrue); 67 expect(result is Breakpoint, isTrue);
62 Breakpoint bpt = result; 68 Breakpoint bpt = result;
63 expect(bpt.type, equals('Breakpoint')); 69 expect(bpt.type, equals('Breakpoint'));
64 expect(bpt.script.id, equals(script.id)); 70 expect(bpt.script.id, equals(script.id));
65 expect(bpt.tokenPos, equals(51)); 71 expect(bpt.tokenPos, equals(67));
66 expect(isolate.breakpoints.length, equals(1)); 72 expect(isolate.breakpoints.length, equals(1));
67 return completer.future; // Wait for breakpoint events. 73 return completer.future; // Wait for breakpoint events.
68 }); 74 });
69 }); 75 });
70 }, 76 },
71 77
72 // Get the stack trace 78 // Get the stack trace
73 (Isolate isolate) { 79 (Isolate isolate) {
74 return isolate.getStack().then((ServiceMap stack) { 80 return isolate.getStack().then((ServiceMap stack) {
75 expect(stack.type, equals('Stack')); 81 expect(stack.type, equals('Stack'));
76 expect(stack['frames'].length, greaterThanOrEqualTo(1)); 82 expect(stack['frames'].length, greaterThanOrEqualTo(1));
77 expect(stack['frames'][0]['function'].name, equals('testFunction')); 83 expect(stack['frames'][0]['function'].name, equals('testFunction'));
78 }); 84 });
79 }, 85 },
80 86
81 // Stepping 87 // Stepping
82 (Isolate isolate) { 88 (Isolate isolate) {
83 // Set up a listener to wait for breakpoint events. 89 // Set up a listener to wait for breakpoint events.
84 Completer completer = new Completer(); 90 Completer completer = new Completer();
85 List events = []; 91 List events = [];
86 isolate.vm.events.stream.listen((ServiceEvent event) { 92 var subscription;
87 if (event.eventType.startsWith('Breakpoint')) { 93 subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
88 expect(event.eventType, equals('BreakpointReached')); 94 if (event.eventType.startsWith('BreakpointReached')) {
89 print('Breakpoint reached'); 95 print('Breakpoint reached');
96 subscription.cancel();
90 completer.complete(); 97 completer.complete();
91 } 98 }
92 }); 99 });
93 100
94 return isolate.stepInto().then((isolate) { 101 return isolate.stepInto().then((isolate) {
95 return completer.future; // Wait for breakpoint events. 102 return completer.future; // Wait for breakpoint events.
96 }); 103 });
97 }, 104 },
98 105
99 // Get the stack trace again. We are in 'print'. 106 // Get the stack trace again. We are in 'helper'.
100 (Isolate isolate) { 107 (Isolate isolate) {
101 return isolate.getStack().then((ServiceMap stack) { 108 return isolate.getStack().then((ServiceMap stack) {
102 expect(stack.type, equals('Stack')); 109 expect(stack.type, equals('Stack'));
103 expect(stack['frames'].length, greaterThanOrEqualTo(2)); 110 expect(stack['frames'].length, greaterThanOrEqualTo(2));
104 expect(stack['frames'][0]['function'].name, equals('print')); 111 expect(stack['frames'][0]['function'].name, equals('helper'));
105 }); 112 });
106 }, 113 },
107 114
108 // Remove breakpoint 115 // Remove breakpoint
109 (Isolate isolate) { 116 (Isolate isolate) {
110 expect(isolate.breakpoints.length, equals(1)); 117 expect(isolate.breakpoints.length, equals(1));
111 var bpt = isolate.breakpoints[0]; 118 var bpt = isolate.breakpoints[0];
112 return isolate.removeBreakpoint(bpt).then((_) { 119 return isolate.removeBreakpoint(bpt).then((_) {
113 expect(isolate.breakpoints.length, equals(0)); 120 expect(isolate.breakpoints.length, equals(0));
114 }); 121 });
115 }, 122 },
116 123
124 // Resume
125 (Isolate isolate) {
126 return isolate.resume().then((_) {
127 expect(isolate.pauseEvent == null, isTrue);
128 });
129 },
130
131 // Add breakpoint at function entry
132 (Isolate isolate) {
133 // Set up a listener to wait for breakpoint events.
134 Completer completer = new Completer();
135 List events = [];
136 var subscription;
137 subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
138 if (event.eventType.startsWith('BreakpointReached')) {
139 print('Breakpoint reached');
140 subscription.cancel();
141 completer.complete();
142 }
143 });
144
145 // Find a specific function.
146 ServiceFunction function = isolate.rootLib.functions.firstWhere(
147 (f) => f.name == 'helper');
148 expect(function, isNotNull);
149
150 // Add the breakpoint at function entry
151 return isolate.addBreakpointAtEntry(function).then((result) {
152 expect(result is Breakpoint, isTrue);
153 Breakpoint bpt = result;
154 expect(bpt.type, equals('Breakpoint'));
155 expect(bpt.script.name, equals('debugging_test.dart'));
156 expect(bpt.tokenPos, equals(29));
157 expect(isolate.breakpoints.length, equals(1));
158 return completer.future; // Wait for breakpoint events.
159 });
160 },
161
117 ]; 162 ];
118 163
119 main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction); 164 main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/service/object.dart ('k') | runtime/vm/service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698