OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 }}); |
OLD | NEW |