2
* Copyright (C) 2010 Google Inc. All rights reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above
11
* copyright notice, this list of conditions and the following disclaimer
12
* in the documentation and/or other materials provided with the
14
* * Neither the name of Google Inc. nor the names of its
15
* contributors may be used to endorse or promote products derived from
16
* this software without specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
* @extends {WebInspector.Object}
35
WebInspector.DebuggerModel = function()
37
InspectorBackend.registerDebuggerDispatcher(new WebInspector.DebuggerDispatcher(this));
39
this._debuggerPausedDetails = null;
41
* @type {Object.<string, WebInspector.Script>}
44
this._scriptsBySourceURL = {};
46
this._canSetScriptSource = false;
47
this._breakpointsActive = true;
49
WebInspector.settings.pauseOnExceptionStateString = WebInspector.settings.createSetting("pauseOnExceptionStateString", WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions);
50
WebInspector.settings.pauseOnExceptionStateString.addChangeListener(this._pauseOnExceptionStateChanged, this);
52
if (!Capabilities.debuggerCausesRecompilation || WebInspector.settings.debuggerEnabled.get())
53
this.enableDebugger();
56
// Keep these in sync with WebCore::ScriptDebugServer
57
WebInspector.DebuggerModel.PauseOnExceptionsState = {
58
DontPauseOnExceptions : "none",
59
PauseOnAllExceptions : "all",
60
PauseOnUncaughtExceptions: "uncaught"
65
* @implements {WebInspector.RawLocation}
66
* @extends {DebuggerAgent.Location}
67
* @param {string} scriptId
68
* @param {number} lineNumber
69
* @param {number} columnNumber
71
WebInspector.DebuggerModel.Location = function(scriptId, lineNumber, columnNumber)
73
this.scriptId = scriptId;
74
this.lineNumber = lineNumber;
75
this.columnNumber = columnNumber;
78
WebInspector.DebuggerModel.Events = {
79
DebuggerWasEnabled: "DebuggerWasEnabled",
80
DebuggerWasDisabled: "DebuggerWasDisabled",
81
DebuggerPaused: "DebuggerPaused",
82
DebuggerResumed: "DebuggerResumed",
83
ParsedScriptSource: "ParsedScriptSource",
84
FailedToParseScriptSource: "FailedToParseScriptSource",
85
BreakpointResolved: "BreakpointResolved",
86
GlobalObjectCleared: "GlobalObjectCleared",
87
CallFrameSelected: "CallFrameSelected",
88
ExecutionLineChanged: "ExecutionLineChanged",
89
ConsoleCommandEvaluatedInSelectedCallFrame: "ConsoleCommandEvaluatedInSelectedCallFrame",
90
BreakpointsActiveStateChanged: "BreakpointsActiveStateChanged"
93
WebInspector.DebuggerModel.BreakReason = {
95
EventListener: "EventListener",
97
Exception: "exception",
99
CSPViolation: "CSPViolation"
102
WebInspector.DebuggerModel.prototype = {
106
debuggerEnabled: function()
108
return !!this._debuggerEnabled;
111
enableDebugger: function()
113
if (this._debuggerEnabled)
116
function callback(error, result)
118
this._canSetScriptSource = result;
120
DebuggerAgent.canSetScriptSource(callback.bind(this));
121
DebuggerAgent.enable(this._debuggerWasEnabled.bind(this));
124
disableDebugger: function()
126
if (!this._debuggerEnabled)
129
DebuggerAgent.disable(this._debuggerWasDisabled.bind(this));
135
canSetScriptSource: function()
137
return this._canSetScriptSource;
140
_debuggerWasEnabled: function()
142
this._debuggerEnabled = true;
143
this._pauseOnExceptionStateChanged();
144
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerWasEnabled);
147
_pauseOnExceptionStateChanged: function()
149
DebuggerAgent.setPauseOnExceptions(WebInspector.settings.pauseOnExceptionStateString.get());
152
_debuggerWasDisabled: function()
154
this._debuggerEnabled = false;
155
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerWasDisabled);
159
* @param {WebInspector.DebuggerModel.Location} rawLocation
161
continueToLocation: function(rawLocation)
163
DebuggerAgent.continueToLocation(rawLocation);
167
* @param {WebInspector.DebuggerModel.Location} rawLocation
168
* @param {string} condition
169
* @param {function(?DebuggerAgent.BreakpointId, Array.<WebInspector.DebuggerModel.Location>):void=} callback
171
setBreakpointByScriptLocation: function(rawLocation, condition, callback)
173
var script = this.scriptForId(rawLocation.scriptId);
174
if (script.sourceURL)
175
this.setBreakpointByURL(script.sourceURL, rawLocation.lineNumber, rawLocation.columnNumber, condition, callback);
177
this.setBreakpointBySourceId(rawLocation, condition, callback);
181
* @param {string} url
182
* @param {number} lineNumber
183
* @param {number=} columnNumber
184
* @param {string=} condition
185
* @param {function(?DebuggerAgent.BreakpointId, Array.<WebInspector.DebuggerModel.Location>)=} callback
187
setBreakpointByURL: function(url, lineNumber, columnNumber, condition, callback)
189
// Adjust column if needed.
190
var minColumnNumber = 0;
191
var scripts = this._scriptsBySourceURL[url] || [];
192
for (var i = 0, l = scripts.length; i < l; ++i) {
193
var script = scripts[i];
194
if (lineNumber === script.lineOffset)
195
minColumnNumber = minColumnNumber ? Math.min(minColumnNumber, script.columnOffset) : script.columnOffset;
197
columnNumber = Math.max(columnNumber, minColumnNumber);
200
* @this {WebInspector.DebuggerModel}
201
* @param {?Protocol.Error} error
202
* @param {DebuggerAgent.BreakpointId} breakpointId
203
* @param {Array.<DebuggerAgent.Location>} locations
205
function didSetBreakpoint(error, breakpointId, locations)
208
var rawLocations = /** @type {Array.<WebInspector.DebuggerModel.Location>} */ (locations);
209
callback(error ? null : breakpointId, rawLocations);
212
DebuggerAgent.setBreakpointByUrl(lineNumber, url, undefined, columnNumber, condition, didSetBreakpoint.bind(this));
213
WebInspector.userMetrics.ScriptsBreakpointSet.record();
217
* @param {WebInspector.DebuggerModel.Location} rawLocation
218
* @param {string} condition
219
* @param {function(?DebuggerAgent.BreakpointId, Array.<WebInspector.DebuggerModel.Location>)=} callback
221
setBreakpointBySourceId: function(rawLocation, condition, callback)
224
* @this {WebInspector.DebuggerModel}
225
* @param {?Protocol.Error} error
226
* @param {DebuggerAgent.BreakpointId} breakpointId
227
* @param {DebuggerAgent.Location} actualLocation
229
function didSetBreakpoint(error, breakpointId, actualLocation)
232
var rawLocation = /** @type {WebInspector.DebuggerModel.Location} */ (actualLocation);
233
callback(error ? null : breakpointId, [rawLocation]);
236
DebuggerAgent.setBreakpoint(rawLocation, condition, didSetBreakpoint.bind(this));
237
WebInspector.userMetrics.ScriptsBreakpointSet.record();
241
* @param {DebuggerAgent.BreakpointId} breakpointId
242
* @param {function(?Protocol.Error)=} callback
244
removeBreakpoint: function(breakpointId, callback)
246
DebuggerAgent.removeBreakpoint(breakpointId, callback);
250
* @param {DebuggerAgent.BreakpointId} breakpointId
251
* @param {DebuggerAgent.Location} location
253
_breakpointResolved: function(breakpointId, location)
255
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, {breakpointId: breakpointId, location: location});
258
_globalObjectCleared: function()
260
this._setDebuggerPausedDetails(null);
262
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.GlobalObjectCleared);
268
this._scriptsBySourceURL = {};
272
* @return {Object.<string, WebInspector.Script>}
276
return this._scripts;
280
* @param {DebuggerAgent.ScriptId} scriptId
281
* @return {WebInspector.Script}
283
scriptForId: function(scriptId)
285
return this._scripts[scriptId] || null;
289
* @param {DebuggerAgent.ScriptId} scriptId
290
* @param {string} newSource
291
* @param {function(?Protocol.Error)} callback
293
setScriptSource: function(scriptId, newSource, callback)
295
this._scripts[scriptId].editSource(newSource, this._didEditScriptSource.bind(this, scriptId, newSource, callback));
299
* @param {DebuggerAgent.ScriptId} scriptId
300
* @param {string} newSource
301
* @param {function(?Protocol.Error)} callback
302
* @param {?Protocol.Error} error
303
* @param {Array.<DebuggerAgent.CallFrame>=} callFrames
305
_didEditScriptSource: function(scriptId, newSource, callback, error, callFrames)
308
if (!error && callFrames && callFrames.length)
309
this._pausedScript(callFrames, this._debuggerPausedDetails.reason, this._debuggerPausedDetails.auxData);
313
* @return {Array.<DebuggerAgent.CallFrame>}
317
return this._debuggerPausedDetails ? this._debuggerPausedDetails.callFrames : null;
321
* @return {?WebInspector.DebuggerPausedDetails}
323
debuggerPausedDetails: function()
325
return this._debuggerPausedDetails;
329
* @param {?WebInspector.DebuggerPausedDetails} debuggerPausedDetails
331
_setDebuggerPausedDetails: function(debuggerPausedDetails)
333
if (this._debuggerPausedDetails)
334
this._debuggerPausedDetails.dispose();
335
this._debuggerPausedDetails = debuggerPausedDetails;
336
if (this._debuggerPausedDetails)
337
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPausedDetails);
338
if (debuggerPausedDetails) {
339
this.setSelectedCallFrame(debuggerPausedDetails.callFrames[0]);
340
DebuggerAgent.setOverlayMessage(WebInspector.UIString("Paused in debugger"));
342
this.setSelectedCallFrame(null);
343
DebuggerAgent.setOverlayMessage();
348
* @param {Array.<DebuggerAgent.CallFrame>} callFrames
349
* @param {string} reason
352
_pausedScript: function(callFrames, reason, auxData)
354
this._setDebuggerPausedDetails(new WebInspector.DebuggerPausedDetails(this, callFrames, reason, auxData));
357
_resumedScript: function()
359
this._setDebuggerPausedDetails(null);
360
if (this._executionLineLiveLocation)
361
this._executionLineLiveLocation.dispose();
362
this._executionLineLiveLocation = null;
363
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerResumed);
367
* @param {DebuggerAgent.ScriptId} scriptId
368
* @param {string} sourceURL
369
* @param {number} startLine
370
* @param {number} startColumn
371
* @param {number} endLine
372
* @param {number} endColumn
373
* @param {boolean} isContentScript
374
* @param {string=} sourceMapURL
375
* @param {boolean=} hasSourceURL
377
_parsedScriptSource: function(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript, sourceMapURL, hasSourceURL)
379
var script = new WebInspector.Script(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript, sourceMapURL, hasSourceURL);
380
this._registerScript(script);
381
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ParsedScriptSource, script);
385
* @param {WebInspector.Script} script
387
_registerScript: function(script)
389
this._scripts[script.scriptId] = script;
390
if (script.sourceURL) {
391
var scripts = this._scriptsBySourceURL[script.sourceURL];
394
this._scriptsBySourceURL[script.sourceURL] = scripts;
396
scripts.push(script);
401
* @param {WebInspector.Script} script
402
* @param {number} lineNumber
403
* @param {number} columnNumber
404
* @return {WebInspector.DebuggerModel.Location}
406
createRawLocation: function(script, lineNumber, columnNumber)
408
if (script.sourceURL)
409
return this.createRawLocationByURL(script.sourceURL, lineNumber, columnNumber)
410
return new WebInspector.DebuggerModel.Location(script.scriptId, lineNumber, columnNumber);
414
* @param {string} sourceURL
415
* @param {number} lineNumber
416
* @param {number} columnNumber
417
* @return {WebInspector.DebuggerModel.Location}
419
createRawLocationByURL: function(sourceURL, lineNumber, columnNumber)
421
var closestScript = null;
422
var scripts = this._scriptsBySourceURL[sourceURL] || [];
423
for (var i = 0, l = scripts.length; i < l; ++i) {
424
var script = scripts[i];
426
closestScript = script;
427
if (script.lineOffset > lineNumber || (script.lineOffset === lineNumber && script.columnOffset > columnNumber))
429
if (script.endLine < lineNumber || (script.endLine === lineNumber && script.endColumn <= columnNumber))
431
closestScript = script;
434
return closestScript ? new WebInspector.DebuggerModel.Location(closestScript.scriptId, lineNumber, columnNumber) : null;
442
return !!this.debuggerPausedDetails();
446
* @param {?WebInspector.DebuggerModel.CallFrame} callFrame
448
setSelectedCallFrame: function(callFrame)
450
if (this._executionLineLiveLocation)
451
this._executionLineLiveLocation.dispose();
452
delete this._executionLineLiveLocation;
454
this._selectedCallFrame = callFrame;
455
if (!this._selectedCallFrame)
458
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.CallFrameSelected, callFrame);
460
function updateExecutionLine(uiLocation)
462
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ExecutionLineChanged, uiLocation);
464
this._executionLineLiveLocation = callFrame.script.createLiveLocation(callFrame.location, updateExecutionLine.bind(this));
468
* @return {?WebInspector.DebuggerModel.CallFrame}
470
selectedCallFrame: function()
472
return this._selectedCallFrame;
476
* @param {string} code
477
* @param {string} objectGroup
478
* @param {boolean} includeCommandLineAPI
479
* @param {boolean} doNotPauseOnExceptionsAndMuteConsole
480
* @param {boolean} returnByValue
481
* @param {boolean} generatePreview
482
* @param {function(?WebInspector.RemoteObject, boolean, RuntimeAgent.RemoteObject=)} callback
484
evaluateOnSelectedCallFrame: function(code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, callback)
487
* @param {?RuntimeAgent.RemoteObject} result
488
* @param {boolean=} wasThrown
490
function didEvaluate(result, wasThrown)
493
callback(null, !!wasThrown, wasThrown ? null : result);
495
callback(WebInspector.RemoteObject.fromPayload(result), !!wasThrown);
497
if (objectGroup === "console")
498
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ConsoleCommandEvaluatedInSelectedCallFrame);
501
this.selectedCallFrame().evaluate(code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, didEvaluate.bind(this));
505
* @param {function(Object)} callback
507
getSelectedCallFrameVariables: function(callback)
509
var result = { this: true };
511
var selectedCallFrame = this._selectedCallFrame;
512
if (!selectedCallFrame)
515
var pendingRequests = 0;
517
function propertiesCollected(properties)
519
for (var i = 0; properties && i < properties.length; ++i)
520
result[properties[i].name] = true;
521
if (--pendingRequests == 0)
525
for (var i = 0; i < selectedCallFrame.scopeChain.length; ++i) {
526
var scope = selectedCallFrame.scopeChain[i];
527
var object = WebInspector.RemoteObject.fromPayload(scope.object);
529
object.getAllProperties(propertiesCollected);
534
* @param {boolean} active
536
setBreakpointsActive: function(active)
538
if (this._breakpointsActive === active)
540
this._breakpointsActive = active;
541
DebuggerAgent.setBreakpointsActive(active);
542
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointsActiveStateChanged, active);
548
breakpointsActive: function()
550
return this._breakpointsActive;
554
* @param {WebInspector.DebuggerModel.Location} rawLocation
555
* @param {function(WebInspector.UILocation):(boolean|undefined)} updateDelegate
556
* @return {WebInspector.Script.Location}
558
createLiveLocation: function(rawLocation, updateDelegate)
560
var script = this._scripts[rawLocation.scriptId];
561
return script.createLiveLocation(rawLocation, updateDelegate);
565
* @param {WebInspector.DebuggerModel.Location} rawLocation
566
* @return {?WebInspector.UILocation}
568
rawLocationToUILocation: function(rawLocation)
570
var script = this._scripts[rawLocation.scriptId];
573
return script.rawLocationToUILocation(rawLocation.lineNumber, rawLocation.columnNumber);
577
* Handles notification from JavaScript VM about updated stack (liveedit or frame restart action).
578
* @this {WebInspector.DebuggerModel}
579
* @param {Array.<DebuggerAgent.CallFrame>=} newCallFrames
580
* @param {Object=} details
582
callStackModified: function(newCallFrames, details)
584
// FIXME: declare this property in protocol and in JavaScript.
585
if (details && details["stack_update_needs_step_in"])
586
DebuggerAgent.stepInto();
588
if (newCallFrames && newCallFrames.length)
589
this._pausedScript(newCallFrames, this._debuggerPausedDetails.reason, this._debuggerPausedDetails.auxData);
594
__proto__: WebInspector.Object.prototype
597
WebInspector.DebuggerEventTypes = {
599
JavaScriptBreakpoint: 1,
605
* @implements {DebuggerAgent.Dispatcher}
606
* @param {WebInspector.DebuggerModel} debuggerModel
608
WebInspector.DebuggerDispatcher = function(debuggerModel)
610
this._debuggerModel = debuggerModel;
613
WebInspector.DebuggerDispatcher.prototype = {
615
* @param {Array.<DebuggerAgent.CallFrame>} callFrames
616
* @param {string} reason
617
* @param {Object=} auxData
619
paused: function(callFrames, reason, auxData)
621
this._debuggerModel._pausedScript(callFrames, reason, auxData);
626
this._debuggerModel._resumedScript();
629
globalObjectCleared: function()
631
this._debuggerModel._globalObjectCleared();
635
* @param {DebuggerAgent.ScriptId} scriptId
636
* @param {string} sourceURL
637
* @param {number} startLine
638
* @param {number} startColumn
639
* @param {number} endLine
640
* @param {number} endColumn
641
* @param {boolean=} isContentScript
642
* @param {string=} sourceMapURL
643
* @param {boolean=} hasSourceURL
645
scriptParsed: function(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript, sourceMapURL, hasSourceURL)
647
this._debuggerModel._parsedScriptSource(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, !!isContentScript, sourceMapURL, hasSourceURL);
651
* @param {string} sourceURL
652
* @param {string} source
653
* @param {number} startingLine
654
* @param {number} errorLine
655
* @param {string} errorMessage
657
scriptFailedToParse: function(sourceURL, source, startingLine, errorLine, errorMessage)
662
* @param {DebuggerAgent.BreakpointId} breakpointId
663
* @param {DebuggerAgent.Location} location
665
breakpointResolved: function(breakpointId, location)
667
this._debuggerModel._breakpointResolved(breakpointId, location);
673
* @param {WebInspector.Script} script
674
* @param {DebuggerAgent.CallFrame} payload
676
WebInspector.DebuggerModel.CallFrame = function(script, payload)
678
this._script = script;
679
this._payload = payload;
680
this._locations = [];
683
WebInspector.DebuggerModel.CallFrame.prototype = {
685
* @return {WebInspector.Script}
697
return this._payload.type;
701
* @return {Array.<DebuggerAgent.Scope>}
705
return this._payload.scopeChain;
709
* @return {RuntimeAgent.RemoteObject}
713
return this._payload.this;
721
return this._payload.functionName;
725
* @return {WebInspector.DebuggerModel.Location}
729
var rawLocation = /** @type {WebInspector.DebuggerModel.Location} */ (this._payload.location);
734
* @param {string} code
735
* @param {string} objectGroup
736
* @param {boolean} includeCommandLineAPI
737
* @param {boolean} doNotPauseOnExceptionsAndMuteConsole
738
* @param {boolean} returnByValue
739
* @param {boolean} generatePreview
740
* @param {function(?RuntimeAgent.RemoteObject, boolean=)=} callback
742
evaluate: function(code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, callback)
745
* @this {WebInspector.DebuggerModel.CallFrame}
746
* @param {?Protocol.Error} error
747
* @param {RuntimeAgent.RemoteObject} result
748
* @param {boolean=} wasThrown
750
function didEvaluateOnCallFrame(error, result, wasThrown)
753
console.error(error);
754
callback(null, false);
757
callback(result, wasThrown);
759
DebuggerAgent.evaluateOnCallFrame(this._payload.callFrameId, code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, didEvaluateOnCallFrame.bind(this));
763
* @param {function(?Protocol.Error=)=} callback
765
restart: function(callback)
768
* @this {WebInspector.DebuggerModel.CallFrame}
769
* @param {?Protocol.Error} error
770
* @param {Array.<DebuggerAgent.CallFrame>=} callFrames
771
* @param {Object=} details
773
function protocolCallback(error, callFrames, details)
776
WebInspector.debuggerModel.callStackModified(callFrames, details);
780
DebuggerAgent.restartFrame(this._payload.callFrameId, protocolCallback);
784
* @param {function(WebInspector.UILocation):(boolean|undefined)} updateDelegate
786
createLiveLocation: function(updateDelegate)
788
var location = this._script.createLiveLocation(this.location, updateDelegate);
789
this._locations.push(location);
793
dispose: function(updateDelegate)
795
for (var i = 0; i < this._locations.length; ++i)
796
this._locations[i].dispose();
797
this._locations = [];
803
* @param {WebInspector.DebuggerModel} model
804
* @param {Array.<DebuggerAgent.CallFrame>} callFrames
805
* @param {string} reason
808
WebInspector.DebuggerPausedDetails = function(model, callFrames, reason, auxData)
810
this.callFrames = [];
811
for (var i = 0; i < callFrames.length; ++i) {
812
var callFrame = callFrames[i];
813
var script = model.scriptForId(callFrame.location.scriptId);
815
this.callFrames.push(new WebInspector.DebuggerModel.CallFrame(script, callFrame));
817
this.reason = reason;
818
this.auxData = auxData;
821
WebInspector.DebuggerPausedDetails.prototype = {
824
for (var i = 0; i < this.callFrames.length; ++i) {
825
var callFrame = this.callFrames[i];
832
* @type {?WebInspector.DebuggerModel}
834
WebInspector.debuggerModel = null;