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) 16extern "C" { 17#if 0 18} /* satisfy cc-mode */ 19#endif 20#endif 21 22#if defined __GNUC__ && __GNUC__ >= 4 23#pragma GCC visibility push(default) 24#endif 25 26/* Note: This file contains experimental APIs. */ 27/* APIs can be replaced at Ruby 2.0.1 or later */ 28 29/* debug inspector APIs */ 30typedef struct rb_debug_inspector_struct rb_debug_inspector_t; 31typedef VALUE (*rb_debug_inspector_func_t)(const rb_debug_inspector_t *, void *); 32 33VALUE rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data); 34VALUE rb_debug_inspector_frame_self_get(const rb_debug_inspector_t *dc, long index); 35VALUE rb_debug_inspector_frame_class_get(const rb_debug_inspector_t *dc, long index); 36VALUE rb_debug_inspector_frame_binding_get(const rb_debug_inspector_t *dc, long index); 37VALUE rb_debug_inspector_frame_iseq_get(const rb_debug_inspector_t *dc, long index); 38VALUE rb_debug_inspector_backtrace_locations(const rb_debug_inspector_t *dc); 39 40/* Old style set_trace_func APIs */ 41 42/* duplicated def of include/ruby/ruby.h */ 43void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); 44int rb_remove_event_hook(rb_event_hook_func_t func); 45 46int rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data); 47void rb_thread_add_event_hook(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); 48int rb_thread_remove_event_hook(VALUE thval, rb_event_hook_func_t func); 49int rb_thread_remove_event_hook_with_data(VALUE thval, rb_event_hook_func_t func, VALUE data); 50 51/* TracePoint APIs */ 52 53VALUE rb_tracepoint_new(VALUE target_thread_not_supported_yet, rb_event_flag_t events, void (*func)(VALUE, void *), void *data); 54VALUE rb_tracepoint_enable(VALUE tpval); 55VALUE rb_tracepoint_disable(VALUE tpval); 56VALUE rb_tracepoint_enabled_p(VALUE tpval); 57 58typedef struct rb_trace_arg_struct rb_trace_arg_t; 59rb_trace_arg_t *rb_tracearg_from_tracepoint(VALUE tpval); 60 61VALUE rb_tracearg_event(rb_trace_arg_t *trace_arg); 62VALUE rb_tracearg_lineno(rb_trace_arg_t *trace_arg); 63VALUE rb_tracearg_path(rb_trace_arg_t *trace_arg); 64VALUE rb_tracearg_method_id(rb_trace_arg_t *trace_arg); 65VALUE rb_tracearg_defined_class(rb_trace_arg_t *trace_arg); 66VALUE rb_tracearg_binding(rb_trace_arg_t *trace_arg); 67VALUE rb_tracearg_self(rb_trace_arg_t *trace_arg); 68VALUE rb_tracearg_return_value(rb_trace_arg_t *trace_arg); 69VALUE rb_tracearg_raised_exception(rb_trace_arg_t *trace_arg); 70 71/* undocumented advanced tracing APIs */ 72 73typedef enum { 74 RUBY_EVENT_HOOK_FLAG_SAFE = 0x01, 75 RUBY_EVENT_HOOK_FLAG_DELETED = 0x02, 76 RUBY_EVENT_HOOK_FLAG_RAW_ARG = 0x04 77} rb_event_hook_flag_t; 78 79void rb_add_event_hook2(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); 80void 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); 81 82#if defined __GNUC__ && __GNUC__ >= 4 83#pragma GCC visibility pop 84#endif 85 86#if defined(__cplusplus) 87#if 0 88{ /* satisfy cc-mode */ 89#endif 90} /* extern "C" { */ 91#endif 92 93#endif /* RUBY_DEBUG_H */ 94