How can one get the name and line of a function that called the current one? I would like to have a rudimentary debugging function like this (with npmlog defining log.debug):
function debug() {   var callee, line;   /* MAGIC */   log.debug(callee + ":" + line, arguments) }   When called from another function it would be something like this:
function hello() {    debug("world!") } // outputs something like: // "hello:2 'world!'"   For clarity, what I want is essentially analogous to this in Python:
import inspect def caller():     return inspect.stack()[2][3] // line no from getframeinfo().lineno   Is there a Node equivalent to accomplish this?
Using info from here: Accessing line number in V8 JavaScript (Chrome & Node.js)
you can add some prototypes to provide access to this info from 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()   Returns '28' and 'foo', respectively.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With