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

Side by Side Diff: test/debugger/test-api.js

Issue 2503293002: [debug-wrapper] LiveEdit, frame.restart(), breakpoints (Closed)
Patch Set: Address comments Created 4 years, 1 month 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
« no previous file with comments | « test/debugger/debugger.status ('k') | test/mjsunit/debug-liveedit-1.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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project 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 "use strict"; 5 "use strict";
6 6
7 // If true, prints all messages sent and received by inspector. 7 // If true, prints all messages sent and received by inspector.
8 const printProtocolMessages = false; 8 const printProtocolMessages = false;
9 9
10 // The active wrapper instance. 10 // The active wrapper instance.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 this.ExceptionBreak = { Caught : 0, 63 this.ExceptionBreak = { Caught : 0,
64 Uncaught: 1 }; 64 Uncaught: 1 };
65 65
66 // The different types of breakpoint position alignments. 66 // The different types of breakpoint position alignments.
67 // Must match BreakPositionAlignment in debug.h. 67 // Must match BreakPositionAlignment in debug.h.
68 this.BreakPositionAlignment = { 68 this.BreakPositionAlignment = {
69 Statement: 0, 69 Statement: 0,
70 BreakPosition: 1 70 BreakPosition: 1
71 }; 71 };
72 72
73 // The different script break point types.
74 this.ScriptBreakPointType = { ScriptId: 0,
75 ScriptName: 1,
76 ScriptRegExp: 2 };
77
73 // Store the current script id so we can skip corresponding break events. 78 // Store the current script id so we can skip corresponding break events.
74 this.thisScriptId = %FunctionGetScriptId(receive); 79 this.thisScriptId = %FunctionGetScriptId(receive);
75 80
76 // Register as the active wrapper. 81 // Register as the active wrapper.
77 assertTrue(activeWrapper === undefined); 82 assertTrue(activeWrapper === undefined);
78 activeWrapper = this; 83 activeWrapper = this;
79 } 84 }
80 85
81 enable() { this.sendMessageForMethodChecked("Debugger.enable"); } 86 enable() { this.sendMessageForMethodChecked("Debugger.enable"); }
82 disable() { this.sendMessageForMethodChecked("Debugger.disable"); } 87 disable() { this.sendMessageForMethodChecked("Debugger.disable"); }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 139
135 const params = { location : 140 const params = { location :
136 { scriptId : scriptid.toString(), 141 { scriptId : scriptid.toString(),
137 lineNumber : loc.line, 142 lineNumber : loc.line,
138 columnNumber : loc.column, 143 columnNumber : loc.column,
139 }}; 144 }};
140 if (!!opt_condition) { 145 if (!!opt_condition) {
141 params.condition = opt_condition; 146 params.condition = opt_condition;
142 } 147 }
143 148
144 const {msgid, msg} = this.createMessage( 149 const {msgid, msg} = this.createMessage("Debugger.setBreakpoint", params);
145 "Debugger.setBreakpoint", params);
146 this.sendMessage(msg); 150 this.sendMessage(msg);
147 151
148 const reply = this.takeReplyChecked(msgid); 152 const reply = this.takeReplyChecked(msgid);
153 assertTrue(reply.result !== undefined);
154 const breakid = reply.result.breakpointId;
155 assertTrue(breakid !== undefined);
156
157 return breakid;
158 }
159
160 setScriptBreakPoint(type, scriptid, opt_line, opt_column, opt_condition) {
161 // Only sets by script id are supported for now.
162 assertEquals(this.ScriptBreakPointType.ScriptId, type);
163 return this.setScriptBreakPointById(scriptid, opt_line, opt_column,
164 opt_condition);
165 }
166
167 setScriptBreakPointById(scriptid, opt_line, opt_column, opt_condition) {
168 const loc = %ScriptLocationFromLine2(scriptid, opt_line, opt_column, 0);
169
170 const params = { location :
171 { scriptId : scriptid.toString(),
172 lineNumber : loc.line,
173 columnNumber : loc.column,
174 }};
175 if (!!opt_condition) {
176 params.condition = opt_condition;
177 }
178
179 const {msgid, msg} = this.createMessage("Debugger.setBreakpoint", params);
180 this.sendMessage(msg);
181
182 const reply = this.takeReplyChecked(msgid);
149 assertTrue(reply.result !== undefined); 183 assertTrue(reply.result !== undefined);
150 const breakid = reply.result.breakpointId; 184 const breakid = reply.result.breakpointId;
151 assertTrue(breakid !== undefined); 185 assertTrue(breakid !== undefined);
152 186
153 return breakid; 187 return breakid;
154 } 188 }
155 189
156 clearBreakPoint(breakid) { 190 clearBreakPoint(breakid) {
157 const {msgid, msg} = this.createMessage( 191 const {msgid, msg} = this.createMessage(
158 "Debugger.removeBreakpoint", { breakpointId : breakid }); 192 "Debugger.removeBreakpoint", { breakpointId : breakid });
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 return %FunctionGetScriptSourcePosition(f); 274 return %FunctionGetScriptSourcePosition(f);
241 }; 275 };
242 276
243 setBreakPointsActive(enabled) { 277 setBreakPointsActive(enabled) {
244 const {msgid, msg} = this.createMessage( 278 const {msgid, msg} = this.createMessage(
245 "Debugger.setBreakpointsActive", { active : enabled }); 279 "Debugger.setBreakpointsActive", { active : enabled });
246 this.sendMessage(msg); 280 this.sendMessage(msg);
247 this.takeReplyChecked(msgid); 281 this.takeReplyChecked(msgid);
248 } 282 }
249 283
284 get LiveEdit() {
285 const debugContext = %GetDebugContext();
286 return debugContext.Debug.LiveEdit;
287 }
288
250 // --- Internal methods. ----------------------------------------------------- 289 // --- Internal methods. -----------------------------------------------------
251 290
252 getNextMessageId() { 291 getNextMessageId() {
253 return this.nextMessageId++; 292 return this.nextMessageId++;
254 } 293 }
255 294
256 createMessage(method, params) { 295 createMessage(method, params) {
257 const id = this.getNextMessageId(); 296 const id = this.getNextMessageId();
258 const msg = JSON.stringify({ 297 const msg = JSON.stringify({
259 id: id, 298 id: id,
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 for (let i = 0; i < props.length; i++) { 495 for (let i = 0; i < props.length; i++) {
457 array[i] = props[i]; 496 array[i] = props[i];
458 } 497 }
459 value = array; 498 value = array;
460 } 499 }
461 } 500 }
462 501
463 return { value : () => value, 502 return { value : () => value,
464 isUndefined : () => obj.type == "undefined" 503 isUndefined : () => obj.type == "undefined"
465 }; 504 };
466
467 } 505 }
468 506
469 evaluateOnCallFrame(frame, expr) { 507 evaluateOnCallFrame(frame, expr) {
470 const frameid = frame.callFrameId; 508 const frameid = frame.callFrameId;
471 const {msgid, msg} = this.createMessage( 509 const {msgid, msg} = this.createMessage(
472 "Debugger.evaluateOnCallFrame", 510 "Debugger.evaluateOnCallFrame",
473 { callFrameId : frameid, 511 { callFrameId : frameid,
474 expression : expr 512 expression : expr
475 }); 513 });
476 this.sendMessage(msg); 514 this.sendMessage(msg);
477 const reply = this.takeReplyChecked(msgid); 515 const reply = this.takeReplyChecked(msgid);
478 516
479 const result = reply.result.result; 517 const result = reply.result.result;
480 return this.reconstructRemoteObject(result); 518 return this.reconstructRemoteObject(result);
481 } 519 }
482 520
521 execStateFrameRestart(frame) {
522 const frameid = frame.callFrameId;
523 const {msgid, msg} = this.createMessage(
524 "Debugger.restartFrame", { callFrameId : frameid });
525 this.sendMessage(msg);
526 this.takeReplyChecked(msgid);
527 }
528
483 execStateFrame(frame) { 529 execStateFrame(frame) {
484 const scriptid = parseInt(frame.location.scriptId); 530 const scriptid = parseInt(frame.location.scriptId);
485 const line = frame.location.lineNumber; 531 const line = frame.location.lineNumber;
486 const column = frame.location.columnNumber; 532 const column = frame.location.columnNumber;
487 const loc = %ScriptLocationFromLine2(scriptid, line, column, 0); 533 const loc = %ScriptLocationFromLine2(scriptid, line, column, 0);
488 const func = { name : () => frame.functionName }; 534 const func = { name : () => frame.functionName };
489 535
490 function allScopes() { 536 function allScopes() {
491 const scopes = []; 537 const scopes = [];
492 for (let i = 0; i < frame.scopeChain.length; i++) { 538 for (let i = 0; i < frame.scopeChain.length; i++) {
493 scopes.push(this.execStateScope(frame, i)); 539 scopes.push(this.execStateScope(frame, i));
494 } 540 }
495 return scopes; 541 return scopes;
496 }; 542 };
497 543
498 return { sourceColumn : () => loc.column, 544 return { sourceColumn : () => loc.column,
499 sourceLine : () => loc.line + 1, 545 sourceLine : () => loc.line + 1,
500 sourceLineText : () => loc.sourceText, 546 sourceLineText : () => loc.sourceText,
501 evaluate : (expr) => this.evaluateOnCallFrame(frame, expr), 547 evaluate : (expr) => this.evaluateOnCallFrame(frame, expr),
502 functionName : () => frame.functionName, 548 functionName : () => frame.functionName,
503 func : () => func, 549 func : () => func,
504 localCount : () => this.execStateFrameLocalCount(frame), 550 localCount : () => this.execStateFrameLocalCount(frame),
505 localName : (ix) => this.execStateFrameLocalName(frame, ix), 551 localName : (ix) => this.execStateFrameLocalName(frame, ix),
506 localValue: (ix) => this.execStateFrameLocalValue(frame, ix), 552 localValue: (ix) => this.execStateFrameLocalValue(frame, ix),
553 restart : () => this.execStateFrameRestart(frame),
507 scopeCount : () => frame.scopeChain.length, 554 scopeCount : () => frame.scopeChain.length,
508 scope : (index) => this.execStateScope(frame, index), 555 scope : (index) => this.execStateScope(frame, index),
509 allScopes : allScopes.bind(this) 556 allScopes : allScopes.bind(this)
510 }; 557 };
511 } 558 }
512 559
513 eventDataException(params) { 560 eventDataException(params) {
514 switch (params.data.type) { 561 switch (params.data.type) {
515 case "string": { 562 case "string": {
516 return params.data.value; 563 return params.data.value;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 debug.instance = new DebugWrapper(); 688 debug.instance = new DebugWrapper();
642 debug.instance.enable(); 689 debug.instance.enable();
643 } 690 }
644 return debug.instance; 691 return debug.instance;
645 }}); 692 }});
646 693
647 Object.defineProperty(debug, 'ScopeType', { get: function() { 694 Object.defineProperty(debug, 'ScopeType', { get: function() {
648 const instance = debug.Debug; 695 const instance = debug.Debug;
649 return instance.ScopeType; 696 return instance.ScopeType;
650 }}); 697 }});
OLDNEW
« no previous file with comments | « test/debugger/debugger.status ('k') | test/mjsunit/debug-liveedit-1.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698