节点.js和分段故障

node.js and Segmentation fault

本文关键字:故障 分段 js 节点      更新时间:2023-09-26

>是否可以在node.js进入分段错误时检查javascript堆栈跟踪?

目前的情况如下:我正在运行一个脚本,该脚本具有一些嵌套async.eachSeries,由于某种奇怪的原因导致RangeError: Maximum call stack size exceeded。因此,我通过node --stack-size=1000000增加了堆栈大小,并且留下了分段错误。

以下是脚本的源代码:http://nopaste.info/ca0c118591.html

更新

我也尝试了segfault-handler,但由于某种难以理解的原因,它没有抓住我的段错误。

有一个segfault-handler模块,它可以捕获非Windows平台上的段错误并生成堆栈跟踪。但是如果你得到一个RangeError,那不是段错误。

这可能意味着您的代码中的某处有递归。由于 V8 删除了对 TCO(尾部调用优化)的支持,因此呼叫大小将增长,直到爆炸。

使用 --stack_size 似乎是一个自然的解决方案,但它实际上并没有增加堆栈大小,它告诉 V8 假设有更大的堆栈大小,而实际上这是由操作系统控制的。

来源:

  • https://github.com/nodejs/node-v0.x-archive/issues/5669
  • https://github.com/nodejs/node/issues/6360
  • 节点.js尾调用优化:可能与否?

所以现在(使用 Node.js 8.x),最好的解决方案很简单,停止使用递归函数。