npm 包 callsite-record 使用教程

阅读时长 5 分钟读完

在 Node.js 的开发过程中,经常需要对代码进行调试和排查错误。其中调用栈信息是非常重要的一部分,可以帮助我们更好地理解代码的执行过程以及找出错误所在。而 npm 包 callsite-record 就是一个方便获取调用栈信息的工具。

安装

使用 npm 安装 callsite-record:

使用方法

获取当前调用栈

可以通过调用 callsiteRecord.capture() 方法来获取当前的调用栈:

输出结果类似于:

-- -------------------- ---- -------
-
  -
    ---------------- ---------- -----------------
    -------------- ---------- ---------------
    ------------ ---------- -------------
    ------------ ---------- -------------
    -------------- ---------- ---------------
    -------------- ---------- ---------------
    ------------ ---------- -------------
    -------------- ---------- ---------------
    ------- ---------- --------
    --------- ---------- ----------
    ----------- ---------- -----------
  --
  -
    -- ---
  -
-

获取指定深度的调用栈

可以传入一个参数来指定需要获取的调用栈深度:

解析调用栈信息

对于每个调用栈的元素,可以获取以下信息:

  • getFileName():该函数所在文件的绝对路径。
  • getLineNumber():该函数在文件中的行数。
  • getColumnNumber():该函数在文件中的列数。
  • getTypeName():如果该函数是对象的方法,返回该对象的类型名称;否则返回 undefined。
  • getFunction():返回该调用栈元素对应的函数。
  • getMethodName():如果该函数是对象的方法,返回该方法名;否则返回该函数名。
  • isConstructor():如果该函数是构造函数,返回 true;否则返回 false。
  • isEval():如果该函数是在 eval 中创建的,返回 true;否则返回 false。
  • isNative():如果该函数是内置函数,返回 true;否则返回 false。
  • isToplevel():如果该函数是全局作用域中定义的,返回 true;否则返回 false。

例如,我们可以使用以下代码将调用栈信息解析成字符串形式并输出:

格式化调用栈信息

使用 callsiteRecord.render(stack) 方法可以将调用栈信息格式化成易读的字符串:

输出结果类似于:

获取调用栈信息的上下文

使用 callsiteRecord.getCallerSourceLines(stack, [options]) 方法可以获取调用栈信息所在文件中指定行数的代码。例如,以下代码可以打印出调用 foo() 函数时的代码片段:

纠错
反馈