【问题标题】:Nodejs native addon weird segmentation faultNodejs原生插件奇怪的分段错误
【发布时间】: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


【解决方案1】:

好的,原来我在另一个 .cc 文件中定义了另一个名为 ComputeContext 的结构。 MSVC 没有抛出任何错误并链接了两个文件。这会导致在创建结构实例时出现分段错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多