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

Side by Side Diff: webkit/glue/devtools/js/debugger_agent.js

Issue 99185: Pause and show call stack on exceptions (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 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 | webkit/glue/devtools/js/inspector_controller.js » ('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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview Provides communication interface to remote v8 debugger. See 6 * @fileoverview Provides communication interface to remote v8 debugger. See
7 * protocol decription at http://code.google.com/p/v8/wiki/DebuggerProtocol 7 * protocol decription at http://code.google.com/p/v8/wiki/DebuggerProtocol
8 */ 8 */
9 goog.provide('devtools.DebuggerAgent'); 9 goog.provide('devtools.DebuggerAgent');
10 10
(...skipping 21 matching lines...) Expand all
32 this.requestNumberToBreakpointInfo_ = null; 32 this.requestNumberToBreakpointInfo_ = null;
33 33
34 /** 34 /**
35 * Information on current stack top frame. 35 * Information on current stack top frame.
36 * See JavaScriptCallFrame.idl. 36 * See JavaScriptCallFrame.idl.
37 * @type {?Object} 37 * @type {?Object}
38 */ 38 */
39 this.currentCallFrame_ = null; 39 this.currentCallFrame_ = null;
40 40
41 /** 41 /**
42 * Whether to stop in the debugger on the exceptions.
43 * @type {boolean}
44 */
45 this.pauseOnExceptions_ = true;
46
47 /**
42 * Mapping: request sequence number->callback. 48 * Mapping: request sequence number->callback.
43 * @type {Object} 49 * @type {Object}
44 */ 50 */
45 this.requestSeqToCallback_ = null; 51 this.requestSeqToCallback_ = null;
46 }; 52 };
47 53
48 54
49 /** 55 /**
50 * Resets debugger agent to its initial state. 56 * Resets debugger agent to its initial state.
51 */ 57 */
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 * Tells the v8 debugger to continue execution after it has been stopped on a 172 * Tells the v8 debugger to continue execution after it has been stopped on a
167 * breakpoint or an exception. 173 * breakpoint or an exception.
168 */ 174 */
169 devtools.DebuggerAgent.prototype.resumeExecution = function() { 175 devtools.DebuggerAgent.prototype.resumeExecution = function() {
170 var cmd = new devtools.DebugCommand('continue'); 176 var cmd = new devtools.DebugCommand('continue');
171 devtools.DebuggerAgent.sendCommand_(cmd); 177 devtools.DebuggerAgent.sendCommand_(cmd);
172 }; 178 };
173 179
174 180
175 /** 181 /**
182 * @return {boolean} True iff the debugger will pause execution on the
183 * exceptions.
184 */
185 devtools.DebuggerAgent.prototype.pauseOnExceptions = function() {
186 return this.pauseOnExceptions_;
187 };
188
189
190 /**
191 * Tells whether to pause in the debugger on the exceptions or not.
192 * @param {boolean} value True iff execution should be stopped in the debugger
193 * on the exceptions.
194 */
195 devtools.DebuggerAgent.prototype.setPauseOnExceptions = function(value) {
196 this.pauseOnExceptions_ = value;
197 };
198
199
200 /**
176 * Current stack top frame. 201 * Current stack top frame.
177 * @return {Object} 202 * @return {Object}
178 */ 203 */
179 devtools.DebuggerAgent.prototype.getCurrentCallFrame = function() { 204 devtools.DebuggerAgent.prototype.getCurrentCallFrame = function() {
180 return this.currentCallFrame_; 205 return this.currentCallFrame_;
181 }; 206 };
182 207
183 208
184 /** 209 /**
185 * Sends 'evaluate' request to the debugger. 210 * Sends 'evaluate' request to the debugger.
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 }; 375 };
351 376
352 377
353 /** 378 /**
354 * @param {devtools.DebuggerMessage} msg 379 * @param {devtools.DebuggerMessage} msg
355 */ 380 */
356 devtools.DebuggerAgent.prototype.handleExceptionEvent_ = function(msg) { 381 devtools.DebuggerAgent.prototype.handleExceptionEvent_ = function(msg) {
357 var body = msg.getBody(); 382 var body = msg.getBody();
358 debugPrint('Uncaught exception in ' + body.script.name + ':' + 383 debugPrint('Uncaught exception in ' + body.script.name + ':' +
359 body.sourceLine + '\n' + body.sourceLineText); 384 body.sourceLine + '\n' + body.sourceLineText);
360 this.resumeExecution(); 385 if (this.pauseOnExceptions_) {
386 var body = msg.getBody();
387
388 var sourceId = -1;
389 // The exception may happen in native code in which case there is no script.
390 if (body.script) {
391 sourceId = body.script.id;
392 }
393
394 var line = devtools.DebuggerAgent.v8ToWwebkitLineNumber_(body.sourceLine);
395
396 this.currentCallFrame_ = {
397 'sourceID': sourceId,
398 'line': line,
399 'script': body.script,
400 'scopeChain': [],
401 'thisObject': {}
402 };
403 this.requestBacktrace_();
404 } else {
405 this.resumeExecution();
406 }
361 }; 407 };
362 408
363 409
364 /** 410 /**
365 * @param {devtools.DebuggerMessage} msg 411 * @param {devtools.DebuggerMessage} msg
366 */ 412 */
367 devtools.DebuggerAgent.prototype.handleScriptsResponse_ = function(msg) { 413 devtools.DebuggerAgent.prototype.handleScriptsResponse_ = function(msg) {
368 var scripts = msg.getBody(); 414 var scripts = msg.getBody();
369 for (var i = 0; i < scripts.length; i++) { 415 for (var i = 0; i < scripts.length; i++) {
370 var script = scripts[i]; 416 var script = scripts[i];
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 565
520 566
521 /** 567 /**
522 * Returns user-friendly representation of the function call from the stack 568 * Returns user-friendly representation of the function call from the stack
523 * frame. 569 * frame.
524 * @param {Object} stackFrame Frame json object from 'backtrace' response. 570 * @param {Object} stackFrame Frame json object from 'backtrace' response.
525 * @return {!string} Function name with argument values. 571 * @return {!string} Function name with argument values.
526 */ 572 */
527 devtools.DebuggerAgent.formatFunctionCall_ = function(stackFrame, msg) { 573 devtools.DebuggerAgent.formatFunctionCall_ = function(stackFrame, msg) {
528 var func = msg.lookup(stackFrame.func.ref); 574 var func = msg.lookup(stackFrame.func.ref);
529 var argv = []; 575 if (func.name) {
530 for (var j = 0; j < stackFrame.arguments.length; j++) { 576 return func.name;
531 var arg = stackFrame.arguments[j]; 577 } else {
532 var val = devtools.DebuggerAgent.formatObjectReference_(arg.value, msg); 578 // TODO(yurys): support method name inference(F.m = function() {} should be
533 argv.push(arg.name + ' = ' + val); 579 // a function with name 'm')
580 return '(anonymous function)';
534 } 581 }
535 return func.name + '(' + argv.join(', ') + ')';
536 }; 582 };
537 583
538 584
539 /** 585 /**
540 * Converts an object from the debugger response to the format understandable 586 * Converts an object from the debugger response to the format understandable
541 * by ScriptsPanel. 587 * by ScriptsPanel.
542 * @param {Object} object An object from the debugger protocol response. 588 * @param {Object} object An object from the debugger protocol response.
543 * @param {devtools.DebuggerMessage} msg Parsed debugger response. 589 * @param {devtools.DebuggerMessage} msg Parsed debugger response.
544 * @return {!Object} Object describing 'object' in the format expected by 590 * @return {!Object} Object describing 'object' in the format expected by
545 * ScriptsPanel and its panes. 591 * ScriptsPanel and its panes.
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 1023
978 1024
979 /** 1025 /**
980 * @param {number} handle Object handle. 1026 * @param {number} handle Object handle.
981 * @return {?Object} Returns the object with the handle if it was sent in this 1027 * @return {?Object} Returns the object with the handle if it was sent in this
982 * message(some objects referenced by handles may be missing in the message). 1028 * message(some objects referenced by handles may be missing in the message).
983 */ 1029 */
984 devtools.DebuggerMessage.prototype.lookup = function(handle) { 1030 devtools.DebuggerMessage.prototype.lookup = function(handle) {
985 return this.refs_[handle]; 1031 return this.refs_[handle];
986 }; 1032 };
OLDNEW
« no previous file with comments | « no previous file | webkit/glue/devtools/js/inspector_controller.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698