在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 inspectdef 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