Beispiel #1
0
        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
        }