跟踪 Node.js 程序执行

Tracing Node.js program execution

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

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

约束

我不关心的事情

到目前为止我调查过的事情:

使用NODE_V8_COVERAGE:

我发现如果我将NODE_V8_COVERAGE环境变量设置为一个目录,当程序退出时,覆盖率数据会输出到那个目录(这里有一个blog post关于这个特性的创建) .

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

使用检查器

我也一直在试验 Node.js inspector。我找到了一个有用的 CPU 分析器 here。这最终可能会有所帮助,但这个分析器是通过采样来工作的,而不是作为语言的钩子。结果,我只获得了部分运行缓慢的代码的行号/计数。

我也尝试过使用 Profiler.startPreciseCoverage,认为这可能会以某种方式为我提供执行的每一行(没有找到明确说明其实际作用的文档)。好像没什么用

使用伊斯坦布尔

我想尽可能避免检测代码。

问题

看来我的选择有限,但同时这只是我谷歌了一两个小时的结果。

有没有更好的方法来捕获上面列出的约束的线覆盖?

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 的代码。

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

compiling/building Node.js 二进制文件的说明可在 https://github.com/nodejs/node/blob/master/BUILDING.md#building-nodejs-on-supported-platforms.

中找到

从长远来看,您可以对拉取请求提出意见,看看它是否满足您的需求,并希望它能再次进行。好像停滞了。