Issue #14870 has been reported by yarmiganosca (Chris Hoffman).

----------------------------------------
Bug #14870: Both TracePoint's :call and :c_call filters seem to skip a lot of builtin methods
https://bugs.ruby-lang.org/issues/14870

* Author: yarmiganosca (Chris Hoffman)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.5.1p57
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
It looks like a lot of builtin methods (`Array#<<` and `Integer#+`, for example) aren't hooked when using the :call or :c_call filters for TracePoint.

```
 irb
 :001 > [RUBY_VERSION, RUBY_PATCHLEVEL]
 => ["2.5.1", 57] 
 :002 > TracePoint.new(:call, :c_call) { |tp| puts tp.method_id if tp.method_id == :<< }.enable { [] << 4 }
 => [4] 
 :003 > TracePoint.new(:call, :c_call) { |tp| puts tp.method_id if tp.method_id == :concat }.enable { [].concat([4]) }
concat
 => [4]
 :004 > TracePoint.new(:call, :c_call) { |tp| puts tp.method_id if tp.method_id == :+ }.enable { 1 + 1 }
 => 2 
 :005 > TracePoint.new(:call, :c_call) { |tp| puts tp.method_id if tp.method_id == :+ }.enable { 1.0 + 1.0 }
 => 2.0
```

I can understand if TracePoint being able to hook every method call against every object would be prohibitive from a performance perspective, but the TracePoint documentation currently doesn't indicate that it ignores entire classes of methods, so either the implementation should support every method call (maybe through other event types, if necessary) or the documentation should be clear about what TracePoint filters will and won't hook into.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>