Ruby 3.2.3p157 (2024-01-18 revision 52bb2ac0a6971d0391efa2275f7a66bff319087c)
|
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/returns_nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/event.h"
#include "ruby/internal/value.h"
Go to the source code of this file.
Functions | |
Frame-profiling APIs | |
int | rb_profile_frames (int start, int limit, VALUE *buff, int *lines) |
Queries mysterious "frame"s of the given range. | |
VALUE | rb_profile_frame_path (VALUE frame) |
Queries the path of the passed backtrace. | |
VALUE | rb_profile_frame_absolute_path (VALUE frame) |
Identical to rb_profile_frame_path(), except it tries to expand the returning path. | |
VALUE | rb_profile_frame_label (VALUE frame) |
Queries human-readable "label" string. | |
VALUE | rb_profile_frame_base_label (VALUE frame) |
Identical to rb_profile_frame_label(), except it does not "qualify" the result. | |
VALUE | rb_profile_frame_full_label (VALUE frame) |
Identical to rb_profile_frame_label(), except it returns a qualified result. | |
VALUE | rb_profile_frame_first_lineno (VALUE frame) |
Queries the first line of the method of the passed frame pointer. | |
VALUE | rb_profile_frame_classpath (VALUE frame) |
Queries the class path of the method that the passed frame represents. | |
VALUE | rb_profile_frame_singleton_method_p (VALUE frame) |
Queries if the method of the passed frame is a singleton class. | |
VALUE | rb_profile_frame_method_name (VALUE frame) |
Queries the name of the method of the passed frame. | |
VALUE | rb_profile_frame_qualified_method_name (VALUE frame) |
Identical to rb_profile_frame_method_name(), except it "qualifies" the return value with its defining class. | |
Old style set_trace_func APIs | |
int | rb_remove_event_hook_with_data (rb_event_hook_func_t func, VALUE data) |
Identical to rb_remove_event_hook(), except it additionally takes the data argument. | |
void | rb_thread_add_event_hook (VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data) |
Identical to rb_add_event_hook(), except its effect is limited to the passed thread. | |
int | rb_thread_remove_event_hook (VALUE thval, rb_event_hook_func_t func) |
Identical to rb_remove_event_hook(), except it additionally takes a thread argument. | |
int | rb_thread_remove_event_hook_with_data (VALUE thval, rb_event_hook_func_t func, VALUE data) |
Identical to rb_thread_remove_event_hook(), except it additionally takes the data argument. | |
Debug inspector APIs | |
#define | RB_DEBUG_INSPECTOR_FRAME_DEPTH(dc, index) rb_debug_inspector_frame_depth(dc, index) |
typedef struct rb_debug_inspector_struct | rb_debug_inspector_t |
Opaque struct representing a debug inspector. | |
typedef VALUE(* | rb_debug_inspector_func_t) (const rb_debug_inspector_t *dc, void *data) |
Type of the callback function passed to rb_debug_inspector_open(). | |
VALUE | rb_debug_inspector_open (rb_debug_inspector_func_t func, void *data) |
Prepares, executes, then cleans up a debug session. | |
VALUE | rb_debug_inspector_backtrace_locations (const rb_debug_inspector_t *dc) |
Queries the backtrace object of the context. | |
VALUE | rb_debug_inspector_frame_self_get (const rb_debug_inspector_t *dc, long index) |
Queries the current receiver of the passed context's upper frame. | |
VALUE | rb_debug_inspector_frame_class_get (const rb_debug_inspector_t *dc, long index) |
Queries the current class of the passed context's upper frame. | |
VALUE | rb_debug_inspector_frame_binding_get (const rb_debug_inspector_t *dc, long index) |
Queries the binding of the passed context's upper frame. | |
VALUE | rb_debug_inspector_frame_iseq_get (const rb_debug_inspector_t *dc, long index) |
Queries the instruction sequence of the passed context's upper frame. | |
VALUE | rb_debug_inspector_frame_depth (const rb_debug_inspector_t *dc, long index) |
Queries the depth of the passed context's upper frame. | |
VALUE | rb_debug_inspector_current_depth (void) |
Return current frmae depth. | |
TracePoint APIs | |
typedef struct rb_trace_arg_struct | rb_trace_arg_t |
Type that represents a specific trace event. | |
VALUE | rb_tracepoint_new (VALUE target_thread_not_supported_yet, rb_event_flag_t events, void(*func)(VALUE, void *), void *data) |
Creates a tracepoint by registering a callback function for one or more tracepoint events. | |
VALUE | rb_tracepoint_enable (VALUE tpval) |
Starts (enables) trace(s) defined by the passed object. | |
VALUE | rb_tracepoint_disable (VALUE tpval) |
Stops (disables) an already running instance of TracePoint. | |
VALUE | rb_tracepoint_enabled_p (VALUE tpval) |
Queries if the passed TracePoint is up and running. | |
rb_trace_arg_t * | rb_tracearg_from_tracepoint (VALUE tpval) |
Queries the current event of the passed tracepoint. | |
rb_event_flag_t | rb_tracearg_event_flag (rb_trace_arg_t *trace_arg) |
Queries the event of the passed trace. | |
VALUE | rb_tracearg_event (rb_trace_arg_t *trace_arg) |
Identical to rb_tracearg_event_flag(), except it returns the name of the event in Ruby's symbol. | |
VALUE | rb_tracearg_lineno (rb_trace_arg_t *trace_arg) |
Queries the line of the point where the trace is at. | |
VALUE | rb_tracearg_path (rb_trace_arg_t *trace_arg) |
Queries the file name of the point where the trace is at. | |
VALUE | rb_tracearg_method_id (rb_trace_arg_t *trace_arg) |
Queries the method name of the point where the trace is at. | |
VALUE | rb_tracearg_callee_id (rb_trace_arg_t *trace_arg) |
Identical to rb_tracearg_method_id(), except it returns callee id like rb_frame_callee(). | |
VALUE | rb_tracearg_defined_class (rb_trace_arg_t *trace_arg) |
Queries the class that defines the method that the passed trace is at. | |
VALUE | rb_tracearg_binding (rb_trace_arg_t *trace_arg) |
Creates a binding object of the point where the trace is at. | |
VALUE | rb_tracearg_self (rb_trace_arg_t *trace_arg) |
Queries the receiver of the point trace is at. | |
VALUE | rb_tracearg_return_value (rb_trace_arg_t *trace_arg) |
Queries the return value that the trace represents. | |
VALUE | rb_tracearg_raised_exception (rb_trace_arg_t *trace_arg) |
Queries the raised exception that the trace represents. | |
VALUE | rb_tracearg_object (rb_trace_arg_t *trace_arg) |
Queries the allocated/deallocated object that the trace represents. | |
Postponed Job API | |
typedef void(* | rb_postponed_job_func_t) (void *arg) |
Type of postponed jobs. | |
int | rb_postponed_job_register (unsigned int flags, rb_postponed_job_func_t func, void *data) |
Registers a postponed job. | |
int | rb_postponed_job_register_one (unsigned int flags, rb_postponed_job_func_t func, void *data) |
Identical to rb_postponed_job_register_one(), except it additionally checks for duplicated registration. | |
Definition in file debug.h.
#define RB_DEBUG_INSPECTOR_FRAME_DEPTH | ( | dc, | |
index ) rb_debug_inspector_frame_depth(dc, index) |
typedef VALUE(* rb_debug_inspector_func_t) (const rb_debug_inspector_t *dc, void *data) |
Type of the callback function passed to rb_debug_inspector_open().
Inspection shall happen only inside of them. The passed pointers gets invalidated once after the callback returns.
[in] | dc | A debug context. |
[in,out] | data | What was passed to rb_debug_inspector_open(). |
typedef struct rb_debug_inspector_struct rb_debug_inspector_t |
typedef void(* rb_postponed_job_func_t) (void *arg) |
Type of postponed jobs.
[in,out] | arg | What was passed to rb_postponed_job_register(). |
typedef struct rb_trace_arg_struct rb_trace_arg_t |
VALUE rb_debug_inspector_backtrace_locations | ( | const rb_debug_inspector_t * | dc | ) |
Queries the backtrace object of the context.
This is as if you call caller_locations
at the point of debugger.
[in] | dc | A debug context. |
Thread::Backtrace::Location
which represents the current point of execution at dc
. Definition at line 1570 of file vm_backtrace.c.
Referenced by rb_debug_inspector_backtrace_locations().
VALUE rb_debug_inspector_current_depth | ( | void | ) |
Return current frmae depth.
The | depth of the current frame in Integer. |
Definition at line 1563 of file vm_backtrace.c.
Referenced by rb_debug_inspector_current_depth().
VALUE rb_debug_inspector_frame_binding_get | ( | const rb_debug_inspector_t * | dc, |
long | index ) |
Queries the binding of the passed context's upper frame.
[in] | dc | A debug context. |
[in] | index | Index of the frame from top to bottom. |
rb_eArgError | `index` out of range. |
index
-th frame. Definition at line 1540 of file vm_backtrace.c.
Referenced by rb_debug_inspector_frame_binding_get().
VALUE rb_debug_inspector_frame_class_get | ( | const rb_debug_inspector_t * | dc, |
long | index ) |
Queries the current class of the passed context's upper frame.
[in] | dc | A debug context. |
[in] | index | Index of the frame from top to bottom. |
rb_eArgError | `index` out of range. |
index
-th frame. Definition at line 1533 of file vm_backtrace.c.
Referenced by rb_debug_inspector_frame_class_get().
VALUE rb_debug_inspector_frame_depth | ( | const rb_debug_inspector_t * | dc, |
long | index ) |
Queries the depth of the passed context's upper frame.
Note that the depth is not same as the frame index because debug_inspector skips some special frames but the depth counts all frames.
[in] | dc | A debug context. |
[in] | index | Index of the frame from top to bottom. |
rb_eArgError | `index` out of range. |
The | depth at index -th frame in Integer. |
Definition at line 1556 of file vm_backtrace.c.
Referenced by rb_debug_inspector_frame_depth().
VALUE rb_debug_inspector_frame_iseq_get | ( | const rb_debug_inspector_t * | dc, |
long | index ) |
Queries the instruction sequence of the passed context's upper frame.
[in] | dc | A debug context. |
[in] | index | Index of the frame from top to bottom. |
rb_eArgError | `index` out of range. |
RUBY_Qnil | index -th frame is not in Ruby (C etc.). |
otherwise | An instance of RubyVM::InstructionSequence which represents the instruction sequence at index -th frame. |
Definition at line 1547 of file vm_backtrace.c.
Referenced by rb_debug_inspector_frame_iseq_get().
VALUE rb_debug_inspector_frame_self_get | ( | const rb_debug_inspector_t * | dc, |
long | index ) |
Queries the current receiver of the passed context's upper frame.
[in] | dc | A debug context. |
[in] | index | Index of the frame from top to bottom. |
rb_eArgError | `index` out of range. |
index
-th frame. Definition at line 1526 of file vm_backtrace.c.
Referenced by rb_debug_inspector_frame_self_get().
VALUE rb_debug_inspector_open | ( | rb_debug_inspector_func_t | func, |
void * | data ) |
Prepares, executes, then cleans up a debug session.
[in] | func | A callback to run inside of a debug session. |
[in,out] | data | Passed as-is to func . |
func
. Definition at line 1485 of file vm_backtrace.c.
Referenced by rb_debug_inspector_open().
int rb_postponed_job_register | ( | unsigned int | flags, |
rb_postponed_job_func_t | func, | ||
void * | data ) |
Registers a postponed job.
There are situations when running a ruby program is not possible. For instance when a program is in a signal handler; for another instance when the GC is busy. On such situations however, there might be needs to do something. We cannot but defer such operations until we are 100% sure it is safe to execute them. This mechanism is called postponed jobs. This function registers a new one. The registered job would eventually gets executed.
[in] | flags | (Unused) reserved for future extensions. |
[in] | func | Job body. |
[in,out] | data | Passed as-is to func . |
0 | Postponed job buffer is full. Failed. |
otherwise | Opaque return value. |
Definition at line 1684 of file vm_trace.c.
Referenced by rb_postponed_job_register().
int rb_postponed_job_register_one | ( | unsigned int | flags, |
rb_postponed_job_func_t | func, | ||
void * | data ) |
Identical to rb_postponed_job_register_one(), except it additionally checks for duplicated registration.
In case the passed job is already in the postponed job buffer this function does nothing.
[in] | flags | (Unused) reserved for future extensions. |
[in] | func | Job body. |
[in,out] | data | Passed as-is to func . |
0 | Postponed job buffer is full. Failed. |
otherwise | Opaque return value. |
Definition at line 1703 of file vm_trace.c.
Referenced by rb_postponed_job_register_one().
Identical to rb_profile_frame_path(), except it tries to expand the returning path.
In case the path is require
-d from something else rb_profile_frame_path() can return relative paths. This one tries to avoid that.
[in] | frame | What rb_profile_frames() returned. |
<cfunc> | The frame is in C. |
RUBY_Qnil | Can't infer real path (inside of eval etc.). |
otherwise | Where frame is running. |
Definition at line 1688 of file vm_backtrace.c.
Referenced by rb_profile_frame_absolute_path().
Identical to rb_profile_frame_label(), except it does not "qualify" the result.
Consider the following backtrace:
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | Can't infer the label (C etc.). |
<main> | The frame is global toplevel. |
<compiled> | The frame is dynamic. |
otherwise | Base label of the frame. |
Definition at line 1710 of file vm_backtrace.c.
Referenced by rb_profile_frame_base_label(), and rb_profile_frame_full_label().
Queries the class path of the method that the passed frame represents.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | Can't infer the class (global toplevel etc.). |
otherwise | Class path as in rb_class_path(). |
Definition at line 1739 of file vm_backtrace.c.
Referenced by rb_profile_frame_classpath().
Queries the first line of the method of the passed frame pointer.
Can be handy when for instance a debugger want to display the frame in question.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | Can't infer the line (C etc.). |
otherwise | Line number of the method in question. |
Definition at line 1717 of file vm_backtrace.c.
Referenced by rb_profile_frame_first_lineno().
Identical to rb_profile_frame_label(), except it returns a qualified result.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | Can't infer the label (C etc.). |
<main> | The frame is global toplevel. |
<compiled> | The frame is dynamic. |
otherwise | Qualified label of the frame. |
Definition at line 1808 of file vm_backtrace.c.
Referenced by rb_profile_frame_full_label().
Queries human-readable "label" string.
This is "<main>"
for the toplevel, "<compiled>"
for evaluated ones, method name for methods, class name for classes.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | Can't infer the label (C etc.). |
<main> | The frame is global toplevel. |
<compiled> | The frame is dynamic. |
otherwise | Label of the frame. |
Definition at line 1703 of file vm_backtrace.c.
Referenced by rb_profile_frame_full_label(), and rb_profile_frame_label().
Queries the name of the method of the passed frame.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | The frame in question is not a method. |
otherwise | Name of the method of the frame. |
Definition at line 1768 of file vm_backtrace.c.
Referenced by rb_profile_frame_method_name(), and rb_profile_frame_qualified_method_name().
Queries the path of the passed backtrace.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | The frame is implemented in C etc. |
otherwise | Where frame is running. |
Definition at line 1656 of file vm_backtrace.c.
Referenced by rb_profile_frame_path().
Identical to rb_profile_frame_method_name(), except it "qualifies" the return value with its defining class.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qnil | The frame in question is not a method. |
otherwise | Qualified name of the method of the frame. |
Definition at line 1800 of file vm_backtrace.c.
Referenced by rb_profile_frame_full_label(), and rb_profile_frame_qualified_method_name().
Queries if the method of the passed frame is a singleton class.
[in] | frame | What rb_profile_frames() returned. |
RUBY_Qtrue | It is a singleton method. |
RUBY_Qfalse | Otherwise (normal method/non-method). |
Definition at line 1760 of file vm_backtrace.c.
Referenced by rb_profile_frame_singleton_method_p().
int rb_profile_frames | ( | int | start, |
int | limit, | ||
VALUE * | buff, | ||
int * | lines ) |
Queries mysterious "frame"s of the given range.
The returned values are opaque backtrace pointers, which you are allowed to issue a very limited set of operations listed below. Don't call arbitrary ruby methods.
[in] | start | Start position (0 means the topmost). |
[in] | limit | Number objects of buff . |
[out] | buff | Return buffer. |
[out] | lines | Return buffer. |
buff
. buff
is filled with backtrace pointers. lines
is filled with __LINE__
of each backtraces. Definition at line 1576 of file vm_backtrace.c.
Referenced by rb_profile_frames().
int rb_remove_event_hook_with_data | ( | rb_event_hook_func_t | func, |
VALUE | data ) |
Identical to rb_remove_event_hook(), except it additionally takes the data argument.
This extra argument is the same as that of rb_add_event_hook(), and this function removes the hook which matches both arguments at once.
[in] | func | A callback. |
[in] | data | What to be passed to func . |
func
it is quite possible for the return value to become more than one. Definition at line 299 of file vm_trace.c.
Referenced by rb_remove_event_hook_with_data(), and rb_tracepoint_disable().
void rb_thread_add_event_hook | ( | VALUE | thval, |
rb_event_hook_func_t | func, | ||
rb_event_flag_t | events, | ||
VALUE | data ) |
Identical to rb_add_event_hook(), except its effect is limited to the passed thread.
Other threads are not affected by this.
[in] | thval | An instance of rb_cThread. |
[in] | func | A callback. |
[in] | events | A set of events that func should run. |
[in] | data | Passed as-is to func . |
rb_eTypeError | `thval` is not a thread. |
Definition at line 179 of file vm_trace.c.
Referenced by rb_thread_add_event_hook().
int rb_thread_remove_event_hook | ( | VALUE | thval, |
rb_event_hook_func_t | func ) |
Identical to rb_remove_event_hook(), except it additionally takes a thread argument.
This extra argument is the same as that of rb_thread_add_event_hook(), and this function removes the hook which matches both arguments at once.
[in] | thval | An instance of rb_cThread. |
[in] | func | A callback. |
rb_eTypeError | `thval` is not a thread. |
func
it is quite possible for the return value to become more than one. Definition at line 281 of file vm_trace.c.
Referenced by rb_thread_remove_event_hook().
int rb_thread_remove_event_hook_with_data | ( | VALUE | thval, |
rb_event_hook_func_t | func, | ||
VALUE | data ) |
Identical to rb_thread_remove_event_hook(), except it additionally takes the data argument.
It can also be seen as a routine identical to rb_remove_event_hook_with_data(), except it additionally takes the thread. This function deletes hooks that satisfy all three criteria.
[in] | thval | An instance of rb_cThread. |
[in] | func | A callback. |
[in] | data | What to be passed to func . |
rb_eTypeError | `thval` is not a thread. |
func
it is quite possible for the return value to become more than one. Definition at line 287 of file vm_trace.c.
Referenced by rb_thread_remove_event_hook_with_data(), and rb_tracepoint_disable().
VALUE rb_tracearg_binding | ( | rb_trace_arg_t * | trace_arg | ) |
Creates a binding object of the point where the trace is at.
[in] | trace_arg | A trace instance. |
RUBY_Qnil | The point has no binding. |
otherwise | Its binding. |
Definition at line 956 of file vm_trace.c.
VALUE rb_tracearg_callee_id | ( | rb_trace_arg_t * | trace_arg | ) |
Identical to rb_tracearg_method_id(), except it returns callee id like rb_frame_callee().
[in] | trace_arg | A trace instance. |
RUBY_Qnil | There is no method. |
otherwise | Its method name, in Ruby level Symbol. |
Definition at line 942 of file vm_trace.c.
VALUE rb_tracearg_defined_class | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the class that defines the method that the passed trace is at.
This can be different from the class of rb_tracearg_self()'s return value because of inheritance(s).
[in] | trace_arg | A trace instance. |
RUBY_Qnil | There is no method. |
otherwise | Its method's class. |
Definition at line 949 of file vm_trace.c.
VALUE rb_tracearg_event | ( | rb_trace_arg_t * | trace_arg | ) |
Identical to rb_tracearg_event_flag(), except it returns the name of the event in Ruby's symbol.
[in] | trace_arg | A trace instance. |
Definition at line 847 of file vm_trace.c.
rb_event_flag_t rb_tracearg_event_flag | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the event of the passed trace.
[in] | trace_arg | A trace instance. |
Definition at line 841 of file vm_trace.c.
rb_trace_arg_t * rb_tracearg_from_tracepoint | ( | VALUE | tpval | ) |
Queries the current event of the passed tracepoint.
[in] | tpval | An instance of TracePoint. |
rb_eRuntimeError | `tpval` is disabled. |
Definition at line 835 of file vm_trace.c.
VALUE rb_tracearg_lineno | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the line of the point where the trace is at.
[in] | trace_arg | A trace instance. |
0 | The trace is not at Ruby frame. |
Definition at line 861 of file vm_trace.c.
VALUE rb_tracearg_method_id | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the method name of the point where the trace is at.
[in] | trace_arg | A trace instance. |
RUBY_Qnil | There is no method. |
otherwise | Its method name, in Ruby level Symbol. |
Definition at line 935 of file vm_trace.c.
VALUE rb_tracearg_object | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the allocated/deallocated object that the trace represents.
[in] | trace_arg | A trace instance. |
rb_eRuntimeError | The tracing event is not GC-related. |
Definition at line 1062 of file vm_trace.c.
VALUE rb_tracearg_path | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the file name of the point where the trace is at.
[in] | trace_arg | A trace instance. |
RUBY_Qnil | The trace is not at Ruby frame. |
otherwise | Its path. |
Definition at line 867 of file vm_trace.c.
VALUE rb_tracearg_raised_exception | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the raised exception that the trace represents.
[in] | trace_arg | A trace instance. |
rb_eRuntimeError | The tracing event is not exception-related. |
Definition at line 996 of file vm_trace.c.
VALUE rb_tracearg_return_value | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the return value that the trace represents.
[in] | trace_arg | A trace instance. |
rb_eRuntimeError | The tracing event is not return-related. |
Definition at line 981 of file vm_trace.c.
VALUE rb_tracearg_self | ( | rb_trace_arg_t * | trace_arg | ) |
Queries the receiver of the point trace is at.
[in] | trace_arg | A trace instance. |
Definition at line 975 of file vm_trace.c.
Stops (disables) an already running instance of TracePoint.
[in] | tpval | An instance of TracePoint. |
void
. tpval
stop. Definition at line 1286 of file vm_trace.c.
Starts (enables) trace(s) defined by the passed object.
A TracePoint object does not immediately take effect on creation. You have to explicitly call this API.
[in] | tpval | An instance of TracePoint. |
rb_eArgError | A trace is already running. |
void
. tpval
start. Definition at line 1169 of file vm_trace.c.
Queries if the passed TracePoint is up and running.
[in] | tpval | An instance of TracePoint. |
RUBY_Qtrue | It is. |
RUBY_Qfalse | It isn't. |
Definition at line 1409 of file vm_trace.c.
VALUE rb_tracepoint_new | ( | VALUE | target_thread_not_supported_yet, |
rb_event_flag_t | events, | ||
void(*)(VALUE, void *) | func, | ||
void * | data ) |
Creates a tracepoint by registering a callback function for one or more tracepoint events.
Once the tracepoint is created, you can use rb_tracepoint_enable to enable the tracepoint.
[in] | target_thread_not_supported_yet | Meant for picking the thread in which the tracepoint is to be created. However, current implementation ignore this parameter, tracepoint is created for all threads. Simply specify Qnil. |
[in] | events | Event(s) to listen to. |
[in] | func | A callback function. |
[in,out] | data | Void pointer that will be passed to the callback function. |
When the callback function is called, it will be passed 2 parameters:
VALUE tpval
- the TracePoint object from which trace args can be extracted.void *data
- A void pointer which helps to share scope with the callback function.It is important to note that you cannot register callbacks for normal events and internal events simultaneously because they are different purpose. You can use any Ruby APIs (calling methods and so on) on normal event hooks. However, in internal events, you can not use any Ruby APIs (even object creations). This is why we can't specify internal events by TracePoint directly. Limitations are MRI version specific.
Example:
In this example, a callback function obj_event_i
will be registered for internal events RUBY_INTERNAL_EVENT_NEWOBJ and RUBY_INTERNAL_EVENT_FREEOBJ.
Definition at line 1439 of file vm_trace.c.