当前位置: 首页 > 面试题库 >

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

解飞语
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 我想知道如何获取函数调用者的绝对路径? 可以这样说: 在文件中我打电话; 是file中定义的函数。要求。那么,如何从节点中获取绝对路径? 问题答案: 这是一个如何使用stacktrace在节点中查找调用方文件的示例

  • 问题内容: 如果您有两个功能,例如: 并且A呼叫B,您能知道谁在B内部呼叫B时,例如: 问题答案: 您可以使用检查模块获取所需的信息。它的堆栈方法返回帧记录列表。 对于 Python 2, 每个帧记录都是一个列表。每个记录中的第三个元素是呼叫者名称。您想要的是: def f(): … print inspect.stack()[1][3] … def g(): … f() … g() g 对于 P

  • 问题内容: 要修复测试用例,我需要确定是否从特定的调用程序函数中调用了该函数。我负担不起添加布尔值参数,因为它会破坏定义的接口。怎么办呢? 这是我想要实现的。在这里,我无法更改operation()的参数,因为它是接口实现。 问题答案: 你可以试试

  • 问题内容: 我知道函数,但是我正在寻找一些易于使用的函数实现?如果它也提供了方法的类(如果确实是方法),那将是完美的。 问题答案: 该函数是了解这一点的唯一方法,如果您很懒,这是您自己编写代码的另一个原因。 对抗懒惰! :D

  • 函数名称: 获取应用名称 函数功能: 根据应用包名获取应用名称 函数方法 name = app.getName(bid) 参数 类型 必填 说明 bid string 是 应用包名 返回值 类型 说明 name string 应用名称 函数用例 bid = app.getPackageName("积木编程") name = app.getName(bid) dialog(name,5000) 注

  • 问题内容: 给定一个函数,可以得到它的名字吗?说: 有人告诉我runtime.FuncForPC会有所帮助,但我不明白如何使用它。 问题答案: 很抱歉回答我自己的问题,但我找到了解决方案: