【发布时间】:2017-10-14 10:58:10
【问题描述】:
我正在开发一个节点插件,但遇到了一些奇怪的分段错误问题。在 MyClass.cc 中,我声明了一个结构和一个 NAN_METHOD,如下所示:
struct ComputeContext {
int test = 1;
};
NAN_METHOD(MyClass::Foo) {
ComputeContext ctx;
info.GetReturnValue().Set(Nan::New(true));
}
奇怪的是,当我从 JavaScript 调用此方法时,程序退出并出现分段错误。但是,如果我不初始化测试,例如int test;,它不会崩溃或报告段错误。为了检测分段错误,我使用了 segfault-handler 包。
也许有人知道这里发生了什么?作为旁注,MyClass::Foo 是一个静态方法,不确定这是否会有所不同。
【问题讨论】:
-
您是否尝试过调试它并检查导致崩溃的行?
-
很遗憾,我还没有搭建调试环境。我认为这需要从源代码构建 v8、libuv 和节点。但无论如何,段错误处理程序说它在“info.GetReturnValue().Set(Nan::New(true));”处崩溃。确实这种行为很奇怪。
-
它只需要使用调试符号构建您的扩展并在调试器下运行它。
-
好吧,我可以构建我的插件的调试版本,但是您推荐使用什么工具进行调试?我正在使用 msvc,为了在 Visual Studio 中运行调试器,它不需要我拥有 v8、nodejs、libuv 的静态库还是我在这里混淆了什么?
-
如果您可以使用 Visual Studio 构建它,那么您应该可以使用 Visual Studio 对其进行调试。构建插件只需要导入 node.js 的库(其中将包括 v8 libuv 和其他任何 nodejs 正在使用的),如果你设法构建它,你已经拥有它。
标签: c++ node.js segmentation-fault nan v8