我希望追踪任意Node.js程序的执行路径。
具体来说,我想运行一个程序(服务器或脚本),并且要有某种块级别(函数调用,循环,if语句)的执行跟踪。
限制条件:
- 输出必须包含所有执行期间的文件/行号/命中计数。 - 不采用代码缩小。 Istanbul很棒,但我希望最终执行的代码尽可能可读性强。 - 对于长时间运行的进程(例如服务器),我希望能够看到“当前”行覆盖率(或者尽可能新的覆盖率)。 - 我不想失去任何覆盖数据,因此虽然分析会给我一些线索,但它实际上并不是代码覆盖率。
我不关心以下内容:
- 覆盖范例的读取方式。例如,它可以输出到文件中,可以通过代码读取等等。 - 覆盖格式
我已经研究过的事情:
使用NODE_V8_COVERAGE:
我发现如果将
我在这里面临的问题是,我不确定是否有一种方法可以在程序终止之前触发生成这些报告。
使用检查器
我还尝试过使用Node.js检查器。我找到了一个有用的CPU分析器这里。这可能会很有帮助,但这个分析器是通过采样而不是作为语言钩子来工作的。因此,我只能得到代码中慢的部分的行号/计数。
我还尝试使用
使用伊斯坦布尔
我希望尽可能避免对代码进行仪器化。
问题
看起来我的选择很有限,但同时这只是我搜索了一两个小时的结果。
是否有更好的方法来满足上述约束条件下的行覆盖?
具体来说,我想运行一个程序(服务器或脚本),并且要有某种块级别(函数调用,循环,if语句)的执行跟踪。
限制条件:
- 输出必须包含所有执行期间的文件/行号/命中计数。 - 不采用代码缩小。 Istanbul很棒,但我希望最终执行的代码尽可能可读性强。 - 对于长时间运行的进程(例如服务器),我希望能够看到“当前”行覆盖率(或者尽可能新的覆盖率)。 - 我不想失去任何覆盖数据,因此虽然分析会给我一些线索,但它实际上并不是代码覆盖率。
我不关心以下内容:
- 覆盖范例的读取方式。例如,它可以输出到文件中,可以通过代码读取等等。 - 覆盖格式
我已经研究过的事情:
使用NODE_V8_COVERAGE:
我发现如果将
NODE_V8_COVERAGE
环境变量设置为一个目录,程序退出时覆盖率数据将输出到该目录(这里有一个关于此功能创建的博客文章)。我在这里面临的问题是,我不确定是否有一种方法可以在程序终止之前触发生成这些报告。
使用检查器
我还尝试过使用Node.js检查器。我找到了一个有用的CPU分析器这里。这可能会很有帮助,但这个分析器是通过采样而不是作为语言钩子来工作的。因此,我只能得到代码中慢的部分的行号/计数。
我还尝试使用
Profiler.startPreciseCoverage
,以为这样可以给我执行的每一行代码(并没有发现文档对此做出清晰的说明)。但它似乎没有更有用。使用伊斯坦布尔
我希望尽可能避免对代码进行仪器化。
问题
看起来我的选择很有限,但同时这只是我搜索了一两个小时的结果。
是否有更好的方法来满足上述约束条件下的行覆盖?
startPreciseCoverage
)和尽力覆盖率之间的区别在 https://v8.dev/blog/javascript-code-coverage 上有详细介绍。如果我理解正确,精确覆盖率会记录超出作用域的函数计数,而尽力覆盖率则会丢失该信息。 - Trott