跟踪Node.js程序执行

时间:2020-08-26 03:16:09

标签: node.js code-coverage

我想跟踪任意Node.js程序的执行路径。

具体地说,我想运行一个程序(服务器或脚本),并具有某种执行的块级(函数调用,循环,if语句)跟踪。

约束

  • 在执行过程中,输出必须包含所有行的文件/行/命中数
  • 无代码缩小。伊斯坦布尔很棒,但我想让最终执行的代码尽可能可读。
  • 对于长时间运行的流程(例如服务器),我希望能够看到“当前”线路覆盖率(或尽可能最新)
  • 我不想丢失任何覆盖率数据,因此虽然Profiling可以为我提供一些有关命中行的提示,但这并不是真正的代码覆盖率。

我不在乎的东西

  • 准确地阅读覆盖率。例如,它可以输出到文件中,也可以通过代码读取,等等。
  • 封面格式

到目前为止,我已经调查过了:

使用NODE_V8_COVERAGE:

我发现,如果将NODE_V8_COVERAGE环境变量设置为目录,则当程序退出时(此功能创建时的blog post),覆盖范围数据将输出到该目录。 / p>

我在这里面临的问题是,我不确定在程序终止之前 是否可以触发这些报告的生成。

使用检查器

我也一直在尝试使用Node.js检查器。我找到了有用的CPU事件探查器here。这最终可能会有所帮助,但是此事件探查器仅通过采样工作,而不是与语言挂钩。结果,我只得到行号/计数缓慢的部分代码。

我也尝试使用Profiler.startPreciseCoverage,以为这可能以某种方式使我执行的每一行(找不到文档可以清楚地知道这实际上是做什么的)。似乎没什么用了

使用伊斯坦布尔

如果可能,我想避免使用代码。

问题

似乎我的选择有限,但这同时只是我在Google上搜索了一两个小时的结果。

是否有更好的方法来捕获具有上述约束的线路覆盖范围?

1 个答案:

答案 0 :(得分:0)

a pull request pending for Node.js to add functionality to programmatically start/stop/write V8 coverage information。如果您喜欢冒险,可以使用git获取要使用的Node.js版本,应用补丁中的提交,然后编译Node.js二进制文件。

如果克隆Node.js存储库,则会标记各种版本的Node.js。因此,您可以通过检出v12.19.0标签来获取Node.js 12.19.0的代码。

您可以正常地从拉取请求中挑选提交,也可以使用curl -L https://github.com/nodejs/node/pull/33807.patch | git am将提交作为补丁应用。

有关编译/构建Node.js二进制文件的说明,请参见https://github.com/nodejs/node/blob/master/BUILDING.md#building-nodejs-on-supported-platforms

从长远来看,您可以根据请求是否满足您的请求来提出建议,并希望它再次运行。似乎已经停滞了。

相关问题