在node.js中获取* current *堆栈跟踪(例如,通过SIGINT)

时间:2014-11-07 12:50:24

标签: javascript node.js debugging signals stack-trace

我有一个非常cpu密集的应用程序。 我想知道是否有可能获得当前的堆栈跟踪,以便通过SIGINT终止来理解,例如,当前计算中的特定函数。

我尝试添加以下处理程序:

process.on('SIGINT', function() {
    log('SIGINT!')
    var stack = new Error().stack;
    log( stack );
    log('quitting.');
    process.exit();
});

但似乎仅在密集计算结束时才调用它,而不是在我按 Ctrl-C 时立即调用。

关于如何在不使用日志消息污染代码的情况下遵循执行的任何想法?

2 个答案:

答案 0 :(得分:0)

我没有针对您的问题的具体答案,但我会寻找同步代码(如fs。* Sync)

我建议使用节点检查器(https://github.com/node-inspector/node-inspector),它可以逐步了解代码中的情况以及有关资源使用情况的报告

答案 1 :(得分:0)

--trace-sigint 选项最初是在 nodejs/node#290207 中引入的。它经过审核,随后于 2020 年 5 月作为 v12.17.0 版本的一部分合并到 Node 的主要发布渠道中。

当这个选项传递给 node 运行时,任何 SIGINTCTRL-C 在大多数环境中)不仅会结束执行的脚本,但也打印堆栈跟踪。