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

Side by Side Diff: src/d8.js

Issue 21076: Fixed the debugger compile events.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 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 | « no previous file | src/d8-debug.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 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 } 72 }
73 return result; 73 return result;
74 } 74 }
75 75
76 76
77 // Global object holding debugger related constants and state. 77 // Global object holding debugger related constants and state.
78 const Debug = {}; 78 const Debug = {};
79 79
80 80
81 // Debug events which can occour in the V8 JavaScript engine. These originate 81 // Debug events which can occour in the V8 JavaScript engine. These originate
82 // from the API include file debug.h. 82 // from the API include file v8-debug.h.
83 Debug.DebugEvent = { Break: 1, 83 Debug.DebugEvent = { Break: 1,
84 Exception: 2, 84 Exception: 2,
85 NewFunction: 3, 85 NewFunction: 3,
86 BeforeCompile: 4, 86 BeforeCompile: 4,
87 AfterCompile: 5 }; 87 AfterCompile: 5 };
88 88
89 89
90 // The different types of scripts matching enum ScriptType in objects.h. 90 // The different types of scripts matching enum ScriptType in objects.h.
91 Debug.ScriptType = { Native: 0, 91 Debug.ScriptType = { Native: 0,
92 Extension: 1, 92 Extension: 1,
93 Normal: 2 }; 93 Normal: 2 };
94 94
95 95
96 // Current debug state. 96 // Current debug state.
97 const kNoFrame = -1; 97 const kNoFrame = -1;
98 Debug.State = { 98 Debug.State = {
99 currentFrame: kNoFrame, 99 currentFrame: kNoFrame,
100 currentSourceLine: -1 100 currentSourceLine: -1
101 } 101 }
102 var trace_compile = false; // Tracing all compile events?
102 103
103 104
104 function DebugEventToText(event) { 105 function DebugEventToText(event) {
105 if (event.eventType() == 1) { 106 switch (event.eventType()) {
106 // Build the break details. 107 case Debug.DebugEvent.Break:
107 var details = ''; 108 // Build the break details.
108 if (event.breakPointsHit()) { 109 var details = '';
109 details += 'breakpoint'; 110 if (event.breakPointsHit()) {
110 if (event.breakPointsHit().length > 1) { 111 details += 'breakpoint';
111 details += 's'; 112 if (event.breakPointsHit().length > 1) {
113 details += 's';
114 }
115 details += ' #';
116 for (var i = 0; i < event.breakPointsHit().length; i++) {
117 if (i > 0) {
118 details += ', #';
119 }
120 // Find the break point number. For break points originating from a
121 // script break point display the script break point number.
122 var break_point = event.breakPointsHit()[i];
123 var script_break_point = break_point.script_break_point();
124 if (script_break_point) {
125 details += script_break_point.number();
126 } else {
127 details += break_point.number();
128 }
129 }
130 } else {
131 details += 'break';
112 } 132 }
113 details += ' #'; 133 details += ' in ';
114 for (var i = 0; i < event.breakPointsHit().length; i++) { 134 details += event.executionState().frame(0).invocationText();
115 if (i > 0) {
116 details += ', #';
117 }
118 // Find the break point number. For break points originating from a
119 // script break point display the script break point number.
120 var break_point = event.breakPointsHit()[i];
121 var script_break_point = break_point.script_break_point();
122 if (script_break_point) {
123 details += script_break_point.number();
124 } else {
125 details += break_point.number();
126 }
127 }
128 } else {
129 details += 'break';
130 }
131 details += ' in ';
132 details += event.executionState().frame(0).invocationText();
133 details += ' at ';
134 details += event.executionState().frame(0).sourceAndPositionText();
135 details += '\n'
136 if (event.func().script()) {
137 details += FrameSourceUnderline(event.executionState().frame(0));
138 }
139 Debug.State.currentSourceLine =
140 event.executionState().frame(0).sourceLine();
141 Debug.State.currentFrame = 0;
142 return details;
143 } else if (event.eventType() == 2) {
144 var details = '';
145 if (event.uncaught_) {
146 details += 'Uncaught: ';
147 } else {
148 details += 'Exception: ';
149 }
150
151 details += '"';
152 details += event.exception();
153 details += '"';
154 if (event.executionState().frameCount() > 0) {
155 details += '"';
156 details += event.exception();
157 details += ' at '; 135 details += ' at ';
158 details += event.executionState().frame(0).sourceAndPositionText(); 136 details += event.executionState().frame(0).sourceAndPositionText();
159 details += '\n'; 137 details += '\n'
160 details += FrameSourceUnderline(event.executionState().frame(0)); 138 if (event.func().script()) {
139 details += FrameSourceUnderline(event.executionState().frame(0));
140 }
161 Debug.State.currentSourceLine = 141 Debug.State.currentSourceLine =
162 event.executionState().frame(0).sourceLine(); 142 event.executionState().frame(0).sourceLine();
163 Debug.State.currentFrame = 0; 143 Debug.State.currentFrame = 0;
164 } else { 144 return details;
165 details += ' (empty stack)';
166 Debug.State.currentSourceLine = -1;
167 Debug.State.currentFrame = kNoFrame;
168 }
169 145
170 return details; 146 case Debug.DebugEvent.Exception:
147 var details = '';
148 if (event.uncaught_) {
149 details += 'Uncaught: ';
150 } else {
151 details += 'Exception: ';
152 }
153
154 details += '"';
155 details += event.exception();
156 details += '"';
157 if (event.executionState().frameCount() > 0) {
158 details += '"';
159 details += event.exception();
160 details += ' at ';
161 details += event.executionState().frame(0).sourceAndPositionText();
162 details += '\n';
163 details += FrameSourceUnderline(event.executionState().frame(0));
164 Debug.State.currentSourceLine =
165 event.executionState().frame(0).sourceLine();
166 Debug.State.currentFrame = 0;
167 } else {
168 details += ' (empty stack)';
169 Debug.State.currentSourceLine = -1;
170 Debug.State.currentFrame = kNoFrame;
171 }
172 return details;
173
174 case Debug.DebugEvent.AfterCompile:
175 if (trace_compile) {
176 details = 'Source ' + event.script().name() + ' compiled:\n'
177 var source = event.script().source();
178 if (!(source[source.length - 1] == '\n')) {
179 details += source;
180 } else {
181 details += source.substring(0, source.length - 1);
182 }
183 return details;
184 } else {
185 return '';
186 }
171 } 187 }
172 188
173 return 'Unknown debug event ' + event.eventType(); 189 return 'Unknown debug event ' + event.eventType();
174 }; 190 };
175 191
176 192
177 function SourceUnderline(source_text, position) { 193 function SourceUnderline(source_text, position) {
178 if (!source_text) { 194 if (!source_text) {
179 return; 195 return;
180 } 196 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 292
277 case 'break': 293 case 'break':
278 case 'b': 294 case 'b':
279 this.request_ = this.breakCommandToJSONRequest_(args); 295 this.request_ = this.breakCommandToJSONRequest_(args);
280 break; 296 break;
281 297
282 case 'clear': 298 case 'clear':
283 this.request_ = this.clearCommandToJSONRequest_(args); 299 this.request_ = this.clearCommandToJSONRequest_(args);
284 break; 300 break;
285 301
302 case 'trace':
303 // Return undefined to indicate command handled internally (no JSON).
304 this.request_ = void 0;
305 this.traceCommand_(args);
306 break;
307
286 case 'help': 308 case 'help':
287 case '?': 309 case '?':
288 this.helpCommand_(args); 310 this.helpCommand_(args);
289 // Return null to indicate no JSON to send (command handled internally). 311 // Return undefined to indicate command handled internally (no JSON).
290 this.request_ = void 0; 312 this.request_ = void 0;
291 break; 313 break;
292 314
293 default: 315 default:
294 throw new Error('Unknown command "' + cmd + '"'); 316 throw new Error('Unknown command "' + cmd + '"');
295 } 317 }
296 318
297 last_cmd = cmd; 319 last_cmd = cmd;
298 } 320 }
299 321
300 DebugRequest.prototype.JSONRequest = function() { 322 DebugRequest.prototype.JSONRequest = function() {
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 request.arguments = {}; 612 request.arguments = {};
591 request.arguments.breakpoint = parseInt(args); 613 request.arguments.breakpoint = parseInt(args);
592 } else { 614 } else {
593 throw new Error('Invalid break arguments.'); 615 throw new Error('Invalid break arguments.');
594 } 616 }
595 617
596 return request.toJSONProtocol(); 618 return request.toJSONProtocol();
597 }; 619 };
598 620
599 621
600 // Create a JSON request for the break command. 622 // Handle the trace command.
623 DebugRequest.prototype.traceCommand_ = function(args) {
624 // Process arguments.
625 if (args && args.length > 0) {
626 if (args == 'compile') {
627 trace_compile = !trace_compile;
628 print('Tracing of compiled scripts ' + (trace_compile ? 'on' : 'off'));
629 } else {
630 throw new Error('Invalid trace arguments.');
631 }
632 } else {
633 throw new Error('Invalid trace arguments.');
634 }
635 }
636
637 // Handle the help command.
601 DebugRequest.prototype.helpCommand_ = function(args) { 638 DebugRequest.prototype.helpCommand_ = function(args) {
602 // Help os quite simple. 639 // Help os quite simple.
603 if (args && args.length > 0) { 640 if (args && args.length > 0) {
604 print('warning: arguments to \'help\' are ignored'); 641 print('warning: arguments to \'help\' are ignored');
605 } 642 }
606 643
607 print('break location [condition]'); 644 print('break location [condition]');
608 print('clear <breakpoint #>'); 645 print('clear <breakpoint #>');
609 print('backtrace [from frame #] [to frame #]]'); 646 print('backtrace [from frame #] [to frame #]]');
610 print('frame <frame #>'); 647 print('frame <frame #>');
611 print('step [in | next | out| min [step count]]'); 648 print('step [in | next | out| min [step count]]');
612 print('print <expression>'); 649 print('print <expression>');
613 print('source [from line [num lines]]'); 650 print('source [from line [num lines]]');
614 print('scripts'); 651 print('scripts');
615 print('continue'); 652 print('continue');
653 print('trace compile');
616 print('help'); 654 print('help');
617 } 655 }
618 656
619 657
620 function formatHandleReference_(value) { 658 function formatHandleReference_(value) {
621 return '#' + value.handle() + '#'; 659 return '#' + value.handle() + '#';
622 } 660 }
623 661
624 662
625 // Convert a JSON response to text for display in a text based debugger. 663 // Convert a JSON response to text for display in a text based debugger.
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 json += NumberToJSON_(elem); 1304 json += NumberToJSON_(elem);
1267 } else if (typeof(elem) === 'string') { 1305 } else if (typeof(elem) === 'string') {
1268 json += StringToJSON_(elem); 1306 json += StringToJSON_(elem);
1269 } else { 1307 } else {
1270 json += elem; 1308 json += elem;
1271 } 1309 }
1272 } 1310 }
1273 json += ']'; 1311 json += ']';
1274 return json; 1312 return json;
1275 } 1313 }
OLDNEW
« no previous file with comments | « no previous file | src/d8-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698