如何在没有段错误的情况下从通过 rb_load_protect 加载的脚本调用退出

How to call exit from a script loaded via rb_load_protect without a segfault

我想从 Ruby 2.3.3 (Win32) 成功退出应用程序。当我尝试从该脚本退出程序时出现段错误。

我尝试了以下方法:

# script.rb
loop do
    # do something
    exit 0 if foo()
    break if bar()
end

foobar 只是返回 QtrueQfalse.

我加载脚本:

ruby_init();

int ruby_state = 0;
VALUE script = rb_str_new_cstr("./script.rb");
rb_load_protect(script, 0, &ruby_state);

ruby_cleanup(ruby_state);

它会产生段错误。我还尝试将 ruby_cleanup 放入从 Ruby 调用的函数中,但它会产生相同的段错误。

如何停止 Ruby 虚拟机,或者至少停止当前脚本?

尝试exit!。它会忽略回调等等。