在node.js中获取调用函数的名称和行

如何获得调用当前函数的函数的名称和行?我想要一个像这样的基本调试功能(使用npmlog定义log.debug):

function debug() {

var callee, line;

/* MAGIC */

log.debug(callee + ":" + line, arguments)

}

当从另一个函数调用时,它将是这样的:

function hello() {

debug("world!")

}

// outputs something like:

// "hello:2 'world!'"

为了清楚起见,我想要的基本上与[ython中的类似:

import inspect

def caller():

return inspect.stack()[2][3]

// line no from getframeinfo().lineno

是否有等效的Node来完成此任务?

回答:

您可以添加一些原型以提供从V8访问此信息的权限:

Object.defineProperty(global, '__stack', {

get: function() {

var orig = Error.prepareStackTrace;

Error.prepareStackTrace = function(_, stack) {

return stack;

};

var err = new Error;

Error.captureStackTrace(err, arguments.callee);

var stack = err.stack;

Error.prepareStackTrace = orig;

return stack;

}

});

Object.defineProperty(global, '__line', {

get: function() {

return __stack[1].getLineNumber();

}

});

Object.defineProperty(global, '__function', {

get: function() {

return __stack[1].getFunctionName();

}

});

function foo() {

console.log(__line);

console.log(__function);

}

foo()

分别返回“ 28”和“ foo”。

以上是 在node.js中获取调用函数的名称和行 的全部内容, 来源链接: utcz.com/qa/420516.html

回到顶部