Project

General

Profile

Actions

Feature #20757

open

Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API

Added by richardboehme (Richard Böhme) 2 months ago. Updated 8 days ago.

Status:
Assigned
Target version:
-
[ruby-core:119272]

Description

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.

See also

  • Implementation of TracePoint#parameters in #14694
  • Implementation of TracePoint#eval_script and TracePoint#instruction_sequence in #15287
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0