1 /********************************************************************** 2 3 ruby/debug.h - 4 5 $Author: ko1 $ 6 created at: Tue Nov 20 20:35:08 2012 7 8 Copyright (C) 2012 Yukihiro Matsumoto 9 10 **********************************************************************/ 11 12 #ifndef RB_DEBUG_H 13 #define RB_DEBUG_H 1 14 15 #if defined(__cplusplus) 16 extern "C" { 17 #if 0 18 } /* satisfy cc-mode */ 19 #endif 20 #endif 21 22 RUBY_SYMBOL_EXPORT_BEGIN 23 24 /* Note: This file contains experimental APIs. */ 25 /* APIs can be replaced at Ruby 2.0.1 or later */ 26 27 28 /* profile frames APIs */ 29 int rb_profile_frames(int start, int limit, VALUE *buff, int *lines); 30 VALUE rb_profile_frame_path(VALUE frame); 31 VALUE rb_profile_frame_absolute_path(VALUE frame); 32 VALUE rb_profile_frame_label(VALUE frame); 33 VALUE rb_profile_frame_base_label(VALUE frame); 34 VALUE rb_profile_frame_full_label(VALUE frame); 35 VALUE rb_profile_frame_first_lineno(VALUE frame); 36 VALUE rb_profile_frame_classpath(VALUE frame); 37 VALUE rb_profile_frame_singleton_method_p(VALUE frame); 38 VALUE rb_profile_frame_method_name(VALUE frame); 39 VALUE rb_profile_frame_qualified_method_name(VALUE frame); 40 41 /* debug inspector APIs */ 42 typedef struct rb_debug_inspector_struct rb_debug_inspector_t; 43 typedef VALUE (*rb_debug_inspector_func_t)(const rb_debug_inspector_t *, void *); 44 45 VALUE rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data); 46 VALUE rb_debug_inspector_frame_self_get(const rb_debug_inspector_t *dc, long index); 47 VALUE rb_debug_inspector_frame_class_get(const rb_debug_inspector_t *dc, long index); 48 VALUE rb_debug_inspector_frame_binding_get(const rb_debug_inspector_t *dc, long index); 49 VALUE rb_debug_inspector_frame_iseq_get(const rb_debug_inspector_t *dc, long index); 50 VALUE rb_debug_inspector_backtrace_locations(const rb_debug_inspector_t *dc); 51 52 /* Old style set_trace_func APIs */ 53 54 /* duplicated def of include/ruby/ruby.h */ 55 void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); 56 int rb_remove_event_hook(rb_event_hook_func_t func); 57 58 int rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data); 59 void rb_thread_add_event_hook(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); 60 int rb_thread_remove_event_hook(VALUE thval, rb_event_hook_func_t func); 61 int rb_thread_remove_event_hook_with_data(VALUE thval, rb_event_hook_func_t func, VALUE data); 62 63 /* TracePoint APIs */ 64 65 VALUE rb_tracepoint_new(VALUE target_thread_not_supported_yet, rb_event_flag_t events, void (*func)(VALUE, void *), void *data); 66 VALUE rb_tracepoint_enable(VALUE tpval); 67 VALUE rb_tracepoint_disable(VALUE tpval); 68 VALUE rb_tracepoint_enabled_p(VALUE tpval); 69 70 typedef struct rb_trace_arg_struct rb_trace_arg_t; 71 rb_trace_arg_t *rb_tracearg_from_tracepoint(VALUE tpval); 72 73 rb_event_flag_t rb_tracearg_event_flag(rb_trace_arg_t *trace_arg); 74 VALUE rb_tracearg_event(rb_trace_arg_t *trace_arg); 75 VALUE rb_tracearg_lineno(rb_trace_arg_t *trace_arg); 76 VALUE rb_tracearg_path(rb_trace_arg_t *trace_arg); 77 VALUE rb_tracearg_method_id(rb_trace_arg_t *trace_arg); 78 VALUE rb_tracearg_callee_id(rb_trace_arg_t *trace_arg); 79 VALUE rb_tracearg_defined_class(rb_trace_arg_t *trace_arg); 80 VALUE rb_tracearg_binding(rb_trace_arg_t *trace_arg); 81 VALUE rb_tracearg_self(rb_trace_arg_t *trace_arg); 82 VALUE rb_tracearg_return_value(rb_trace_arg_t *trace_arg); 83 VALUE rb_tracearg_raised_exception(rb_trace_arg_t *trace_arg); 84 VALUE rb_tracearg_object(rb_trace_arg_t *trace_arg); 85 86 /* 87 * Postponed Job API 88 * rb_postponed_job_register and rb_postponed_job_register_one are 89 * async-signal-safe and used via SIGPROF by the "stackprof" RubyGem 90 */ 91 typedef void (*rb_postponed_job_func_t)(void *arg); 92 int rb_postponed_job_register(unsigned int flags, rb_postponed_job_func_t func, void *data); 93 int rb_postponed_job_register_one(unsigned int flags, rb_postponed_job_func_t func, void *data); 94 95 /* undocumented advanced tracing APIs */ 96 97 typedef enum { 98 RUBY_EVENT_HOOK_FLAG_SAFE = 0x01, 99 RUBY_EVENT_HOOK_FLAG_DELETED = 0x02, 100 RUBY_EVENT_HOOK_FLAG_RAW_ARG = 0x04 101 } rb_event_hook_flag_t; 102 103 void rb_add_event_hook2(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); 104 void rb_thread_add_event_hook2(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); 105 106 RUBY_SYMBOL_EXPORT_END 107 108 #if defined(__cplusplus) 109 #if 0 110 { /* satisfy cc-mode */ 111 #endif 112 } /* extern "C" { */ 113 #endif 114 115 #endif /* RUBY_DEBUG_H */ 116