ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:119272] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
@ 2024-09-20 14:38 richardboehme via ruby-core
  2024-09-22 11:36 ` [ruby-core:119278] " richardboehme via ruby-core
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: richardboehme via ruby-core @ 2024-09-20 14:38 UTC (permalink / raw)
  To: ruby-core; +Cc: richardboehme

Issue #20757 has been reported by richardboehme (Richard Böhme).

----------------------------------------
Feature #20757: Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
https://bugs.ruby-lang.org/issues/20757

* Author: richardboehme (Richard Böhme)
* Status: Open
----------------------------------------
**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 



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:119278] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
  2024-09-20 14:38 [ruby-core:119272] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API richardboehme via ruby-core
@ 2024-09-22 11:36 ` richardboehme via ruby-core
  2024-09-30  5:24 ` [ruby-core:119349] " mame (Yusuke Endoh) via ruby-core
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: richardboehme via ruby-core @ 2024-09-22 11:36 UTC (permalink / raw)
  To: ruby-core; +Cc: richardboehme

Issue #20757 has been updated by richardboehme (Richard Böhme).


Actually it seems like retrieving the method object using the `method_id` does not work well for super-calls. See this example:

``` ruby
TracePoint.new(:call) do  |tp|
  p tp.self
end.enable

class A
  def test
  end
end

class B < A
  def test = super
end

B.new.test
```

`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.

----------------------------------------
Feature #20757: Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
https://bugs.ruby-lang.org/issues/20757#change-109886

* Author: richardboehme (Richard Böhme)
* Status: Open
----------------------------------------
**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 



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:119349] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
  2024-09-20 14:38 [ruby-core:119272] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API richardboehme via ruby-core
  2024-09-22 11:36 ` [ruby-core:119278] " richardboehme via ruby-core
@ 2024-09-30  5:24 ` mame (Yusuke Endoh) via ruby-core
  2024-12-10  7:04 ` [ruby-core:120150] " ko1 (Koichi Sasada) via ruby-core
  2025-01-11 20:51 ` [ruby-core:120614] " richardboehme via ruby-core
  3 siblings, 0 replies; 5+ messages in thread
From: mame (Yusuke Endoh) via ruby-core @ 2024-09-30  5:24 UTC (permalink / raw)
  To: ruby-core; +Cc: mame (Yusuke Endoh)

Issue #20757 has been updated by mame (Yusuke Endoh).

Assignee set to ko1 (Koichi Sasada)

----------------------------------------
Feature #20757: Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
https://bugs.ruby-lang.org/issues/20757#change-109961

* Author: richardboehme (Richard Böhme)
* Status: Open
* Assignee: ko1 (Koichi Sasada)
----------------------------------------
**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 



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:120150] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
  2024-09-20 14:38 [ruby-core:119272] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API richardboehme via ruby-core
  2024-09-22 11:36 ` [ruby-core:119278] " richardboehme via ruby-core
  2024-09-30  5:24 ` [ruby-core:119349] " mame (Yusuke Endoh) via ruby-core
@ 2024-12-10  7:04 ` ko1 (Koichi Sasada) via ruby-core
  2025-01-11 20:51 ` [ruby-core:120614] " richardboehme via ruby-core
  3 siblings, 0 replies; 5+ messages in thread
From: ko1 (Koichi Sasada) via ruby-core @ 2024-12-10  7:04 UTC (permalink / raw)
  To: ruby-core; +Cc: ko1 (Koichi Sasada)

Issue #20757 has been updated by ko1 (Koichi Sasada).


Maybe no problem. Could you make a patch?

----------------------------------------
Feature #20757: Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
https://bugs.ruby-lang.org/issues/20757#change-110902

* Author: richardboehme (Richard Böhme)
* Status: Assigned
* Assignee: ko1 (Koichi Sasada)
----------------------------------------
**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 



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:120614] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
  2024-09-20 14:38 [ruby-core:119272] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API richardboehme via ruby-core
                   ` (2 preceding siblings ...)
  2024-12-10  7:04 ` [ruby-core:120150] " ko1 (Koichi Sasada) via ruby-core
@ 2025-01-11 20:51 ` richardboehme via ruby-core
  3 siblings, 0 replies; 5+ messages in thread
From: richardboehme via ruby-core @ 2025-01-11 20:51 UTC (permalink / raw)
  To: ruby-core; +Cc: richardboehme

Issue #20757 has been updated by richardboehme (Richard Böhme).


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!

----------------------------------------
Feature #20757: Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API
https://bugs.ruby-lang.org/issues/20757#change-111443

* Author: richardboehme (Richard Böhme)
* Status: Assigned
* Assignee: ko1 (Koichi Sasada)
----------------------------------------
**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 



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-01-11 20:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-09-20 14:38 [ruby-core:119272] [Ruby master Feature#20757] Make rb_tracearg_(parameters|eval_script|instruction_sequence) public C-API richardboehme via ruby-core
2024-09-22 11:36 ` [ruby-core:119278] " richardboehme via ruby-core
2024-09-30  5:24 ` [ruby-core:119349] " mame (Yusuke Endoh) via ruby-core
2024-12-10  7:04 ` [ruby-core:120150] " ko1 (Koichi Sasada) via ruby-core
2025-01-11 20:51 ` [ruby-core:120614] " richardboehme via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).