【发布时间】:2016-01-27 06:00:49
【问题描述】:
我有一个相当大的 Node.js 项目,它在很长一段时间内都运行良好。然而最近 - 不幸的是无法准确指出它何时发生变化 - 我的应用程序已开始以 program terminated 退出仅在从 node.js 调试器中运行时。
最大的问题:如何找出导致此错误的原因?
我所知道的细分:
- 似乎只在调试器中发生(例如
node debug main.js) - 节点 4.2.5 和 4.2.6 的结果相同。对于 Node 5.5.0,调试器通常会在发生这种情况时停止工作。
- 没有额外的输出,例如堆栈跟踪或错误消息,只有“程序终止”
-
SIGINT、exit和uncaughtException的进程事件被命中 - 通过
console.log()我已经能够确定当我require一个模块时会发生这种情况(更多信息见下文) -
require逻辑被try/catch包围,但没有捕获 - 我曾尝试使用
domain的error处理程序来捕获此问题,方法是将require部分放入run方法中,但在那里也没有捕获到 - 我使用了诸如madge 之类的工具来确保我没有任何循环依赖(也许有更好的方法来做到这一点)
关于要求:
我的程序有一个“插件”类型系统,其中的模块在运行时根据需要require'd。冒犯的require 不是我所知道的确定性,但是:一个可以require 连续几次成功的模块在其他时候会失败。
同样,这是已经运行了几个月的代码。当我开始注意到这一点时,我一直在进行一些相当广泛的更改(但不是对上面提到的使用require 的代码区域)。由于我经常可以通过许多不同的代码路径运行几分钟而不会出现问题,因此很难说是什么触发了这种情况。
我还能在这里做什么?!
作为参考,代码is on Github(不是最新的,因为我没有推送我的更改),如果有帮助的话。
【问题讨论】:
-
说真的,这怎么可能偏离主题/被否决。
标签: javascript node.js debugging segmentation-fault