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 に答える