如何获得调用当前函数的函数的名称和行?我想要一个像这样的基本调试功能(使用npmlog定义log.debug):
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”。