从Node JS中的V8 Stack Trace过滤核心模块

时间:2016-08-14 16:40:25

标签: node.js stack-trace

我从Error对象挂钩堆栈跟踪并返回callSite个对象的数组,我想过滤掉Node核心和本机站点。大多数情况下这不是问题,我可以在path.relative(process.cwd(), t.getFileName())上运行正则表达式匹配,因为大多数文件都有其完整路径名。但是,某些模块具有不合格的名称,例如events.js这是一个核心模块,因此,此方法将失败。

我有一些想法......

  1. 注册我想要定位的模块的文件名,例如我可以从项目目录中收集所有.js文件。
  2. 我注意到events.js不在缓存中(require.cache)所以也许所有核心模块的情况都是如此,所以如果我找不到它们,我可以将它们标记为核心在缓存中。这看起来有点沉重。
  3. 有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

您说除了核心节点之外,所有路径都是绝对路径?假设核心模块都在同一目录中(我没有检查过),您可以将t.getFileName()替换为path.resolve(coreModulesDir, t.getFileName()),其中coreModulesDir是核心模块的绝对路径。

答案 1 :(得分:0)

答案是使用process.binding或更安全的require('builtin-modules'),因为process.binding不公开。

答案 2 :(得分:0)

您可以使用path.isAbsolute,因为核心模块将具有相对路径,而文件将具有绝对路径。