0

我正在编写一个 nodejs C++ 模块,并且在我的 init 函数内部,我进行了一个可能失败的系统调用。在失败时,我希望它向解释器抛出一个异常来处理,而是得到一个段错误。如何获得正确的行为?

所以例如我有类似的东西:

//...
void Init(Handle<Object> target) {
  if (my_setup_io()==FAIL_CODITION){
    ThrowException(Exception::Error(
      String::New("Could not init ")));  //SEG fault instead of exception
  }
  target->Set(String::NewSymbol("myFunction"),
      FunctionTemplate::New(myFunction)->GetFunction());
 }

NODE_MODULE(example, Init)
4

1 回答 1

0

主要问题是ThrowException在 JS 中触发了异常,但实际上并没有触发 C++ 异常。这意味着您的代码将Set在异常运行后尝试运行。

如果您在安排 JS 抛出后返回,它应该可以正常工作。

void Init(Handle<Object> target) {
  if (my_setup_io()==FAIL_CODITION){
    ThrowException(Exception::Error(String::New("Could not init ")));
    return; // RETURN!
  }
  target->Set(String::NewSymbol("myFunction"),
    FunctionTemplate::New(myFunction)->GetFunction());
}

NODE_MODULE(example, Init)
于 2013-01-29T05:33:21.410 回答