public static string GetExceptionBackTrace() { #endif System.Text.StringBuilder builder = new System.Text.StringBuilder(); #if MRUBY R_VAL exc = RubyDLL.mrb_get_exc_value(mrb); R_VAL backtrace = RubyDLL.r_exc_backtrace(mrb, exc); builder.AppendLine(RubyDLL.r_funcall(mrb, exc, "inspect", 0).ToString(mrb)); builder.AppendLine("trace:"); for (var i = 0; i < RubyDLL.r_funcall(mrb, backtrace, "size", 0); ++i) { R_VAL v = RubyDLL.r_ary_ref(mrb, backtrace, i); builder.AppendLine($" [{i}] {v.ToString ( mrb )}"); } return(builder.ToString()); #else R_VAL exc = RubyDLL.rb_errinfo(); R_VAL backtrace = RubyDLL.r_exc_backtrace(exc); builder.AppendLine(RubyDLL.rb_obj_inspect(exc).ToString()); builder.AppendLine("trace:"); for (var i = 0; i < RubyDLL.r_funcall(backtrace, R_VAL.Create("size"), 0); ++i) { R_VAL v = RubyDLL.r_ary_ref(backtrace, R_VAL.Create(i)); builder.AppendLine($" [{i}] {v.ToString ()}"); } return(builder.ToString()); #endif }