1 #ifndef RUBY_PROBES_HELPER_H 2 #define RUBY_PROBES_HELPER_H 9 #define RUBY_DTRACE_HOOK(name, th, klazz, id) \ 11 if (RUBY_DTRACE_##name##_ENABLED()) { \ 12 VALUE _klass = (klazz); \ 14 const char * classname; \ 15 const char * methodname; \ 16 const char * filename; \ 18 rb_thread_method_id_and_class((th), &_id, &_klass); \ 21 if (RB_TYPE_P(_klass, T_ICLASS)) { \ 22 _klass = RBASIC(_klass)->klass; \ 24 else if (FL_TEST(_klass, FL_SINGLETON)) { \ 25 _klass = rb_iv_get(_klass, "__attached__"); \ 27 switch (TYPE(_klass)) { \ 32 VALUE _name = rb_class_path_no_cache(_klass); \ 33 if (!NIL_P(_name)) { \ 34 classname = StringValuePtr(_name); \ 37 classname = "<unknown>"; \ 39 methodname = rb_id2name(_id); \ 40 filename = rb_sourcefile(); \ 41 if (classname && methodname && filename) { \ 55 #define RUBY_DTRACE_METHOD_ENTRY_HOOK(th, klass, id) \ 56 RUBY_DTRACE_HOOK(METHOD_ENTRY, th, klass, id) 58 #define RUBY_DTRACE_METHOD_RETURN_HOOK(th, klass, id) \ 59 RUBY_DTRACE_HOOK(METHOD_RETURN, th, klass, id) 61 #define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(th, klass, id) \ 62 RUBY_DTRACE_HOOK(CMETHOD_ENTRY, th, klass, id) 64 #define RUBY_DTRACE_CMETHOD_RETURN_HOOK(th, klass, id) \ 65 RUBY_DTRACE_HOOK(CMETHOD_RETURN, th, klass, id) VALUE rb_class_path_no_cache(VALUE _klass)