node.js和Segmentation错误
是否有可能在node.js
进入分段错误时检查javascript堆栈跟踪?
目前的情况如下:我正在运行一个脚本,它有几个嵌套的async.eachSeries
,这导致了一个奇怪的原因RangeError: Maximum call stack size exceeded
。 因此,我已经增加了堆栈大小通过node --stack-size=1000000
堆栈大小node --stack-size=1000000
,我留下了分段错误。
以下是脚本的源代码: http : //nopaste.info/ca0c118591.html
更新
我也试过segfault-handler
,但由于一些不可思议的原因,它不捕捉我的段错误。
有一个segfault-handler
模块,它捕获非Windows平台上的段错误并生成堆栈跟踪。 但是,如果你得到一个RangeError
,那不是一个段错误。
这可能意味着你在你的代码中有recursion的地方。 由于V8取消了对TCO(尾部呼叫优化)的支持,呼叫大小将增长,直至爆炸。
使用--stack_size
似乎是一个自然的解决scheme,但实际上并没有增加堆栈大小,它告诉V8假设有一个更大的堆栈大小,实际上这是由操作系统控制的。
资料来源:
- https://github.com/nodejs/node-v0.x-archive/issues/5669
- https://github.com/nodejs/node/issues/6360
- Node.js尾巴优化:可能与否?
所以现在(使用Node.js 8.x)最好的解决scheme是简单的停止使用recursion函数。