| Server IP : 68.183.124.220 / Your IP : 216.73.217.137 Web Server : Apache/2.4.18 (Ubuntu) System : Linux Sandbox-A 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : gavin ( 1000) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/gavin/workspace/happymandarin/node_modules/node-inspector/lib/ |
Upload File : |
var async = require('async'),
convert = require('./convert.js');
var SCOPE_ID_MATCHER = /^scope:(\d+):(\d+)$/;
/**
* @param {Object} config
* @param {DebuggerClient} debuggerClient
*/
function CallFramesProvider(config, session) {
this._config = config;
this._debuggerClient = session.debuggerClient;
}
CallFramesProvider.prototype = {
fetchCallFrames: function(handleResponse) {
this._debuggerClient.request(
'backtrace',
{
inlineRefs: true,
fromFrame: 0,
toFrame: this._config.stackTraceLimit
},
function(err, responseBody, responseRefs) {
if (err) {
handleResponse(err);
return;
}
this._convertBacktraceToCallFrames(responseBody, responseRefs, handleResponse);
}.bind(this));
},
_convertBacktraceToCallFrames: function(backtraceResponseBody, backtrackResponseRefs, handleResponse) {
var debuggerFrames = backtraceResponseBody.frames || [];
async.map(
debuggerFrames,
this._convertDebuggerFrameToInspectorFrame.bind(this, backtrackResponseRefs),
handleResponse);
},
_convertDebuggerFrameToInspectorFrame: function(backtrackResponseRefs, frame, done) {
var scopeChain = frame.scopes.map(function(scope) {
return {
object: {
type: 'object',
objectId: 'scope:' + frame.index + ':' + scope.index,
className: 'Object',
description: 'Object'
},
type: convert.v8ScopeTypeToString(scope.type)
};
});
done(null, {
callFrameId: frame.index.toString(),
functionName: frame.func.inferredName || frame.func.name,
location: {
scriptId: convert.v8ScriptIdToInspectorId(frame.func.scriptId),
lineNumber: frame.line,
columnNumber: frame.column
},
scopeChain: scopeChain,
this: convert.v8RefToInspectorObject(frame.receiver)
});
},
isScopeId: function(objectId) {
return SCOPE_ID_MATCHER.test(objectId);
},
resolveScopeId: function(objectId, callback) {
var scopeIdMatch = SCOPE_ID_MATCHER.exec(objectId);
if (!scopeIdMatch) throw new Error('Invalid scope id "' + objectId + '"');
this._debuggerClient.request(
'scope',
{
number: Number(scopeIdMatch[2]),
frameNumber: Number(scopeIdMatch[1])
},
function(err, result) {
if (err)
callback(err);
else
callback(null, result.object.ref);
});
}
};
exports.CallFramesProvider = CallFramesProvider;