Abstract
As a C-extension developer when using tracepoints I include "ruby/debug.h". This includes most of TracePoint's API but it seems like the C-equivalents for TracePoint#parameters, TracePoint#eval_script and TracePoint#instruction_sequence are missing/not being exported in the header.
Background
Most APIs like rb_tracearg_return_value are exported in "ruby/debug.h". If I understand correctly, the implementations for those methods are located in "ruby/vm_trace.c". The following methods implemented in "ruby/vm_trace.c" are missing in "ruby/debug.h":
rb_tracearg_parameters
rb_tracearg_eval_script
rb_tracearg_instruction_sequence
Proposal
I propose to add those methods to "ruby/debug.h". From my limiting understanding the change should be simple and not break backward compatibility, because we'd only need to add those function declarations to "ruby/debug.h".
I'd be open to contribute this change if it was approved.
Use cases
I'm implementing a method call tracer for Ruby using the C-extension API. I wanted to get information about the parameters that the called method receives. When writing in Ruby this can be done using the TracePoint#parameters method, but I could not find the equivalent C-API. A workaround is to retrieve the method object (using the method_id) and check the method parameters.
TracePoint#self will return the instance of B twice, which makes it hard to get the parameters of A#test without being able to call TracePoint#parameters. In general this makes it hard to track down the location of the method behind TracePoint#method_id, but this is another issue.
I've added the methods to debug.h and in my small test case it seemed to work without any problems. The PR is at https://github.com/ruby/ruby/pull/12553. Let me know if this is fine like this or if I should change anything!
Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
This allows C-Extension developers to call those methods to retrieve
information about a TracePoint's parameters, eval script and
instruction sequence.