如何从C扩展中打印值?

x-y*_*uri 5 c ruby debugging ruby-c-extension

每个Ruby对象都是VALUEC中的类型.如何以可读的方式打印它?

有关调试Ruby C扩展的任何其他提示都是受欢迎的.

rmo*_*lgo 5

您可以p使用C函数调用Ruby对象rb_p.例如:

VALUE empty_array = rb_ary_new();
rb_p(empty_array); // prints out "[]"
Run Code Online (Sandbox Code Playgroud)


x-y*_*uri 3

这是我想出的:

static void d(VALUE v) {
    ID sym_puts = rb_intern("puts");
    ID sym_inspect = rb_intern("inspect");
    rb_funcall(rb_mKernel, sym_puts, 1,
        rb_funcall(v, sym_inspect, 0));
}
Run Code Online (Sandbox Code Playgroud)

将其放在文件中,您可以像这样C输出s:VALUE

VALUE v;
d(v);
Run Code Online (Sandbox Code Playgroud)

我借用了这篇文章的想法。