Project

General

Profile

Bug #15911

Updated by cfis (Charlie Savage) 3 months ago

While updating ruby-prof, I ran into an issue while profiling rails that caused ruby-prof to show an incorrect method invocation tree. This caused by the use of the ||= operator in minitest.

Here is a small test case:

``` <pre>
class Operators
def self.should_be_called_by_test
end

def self.test
self.a
should_be_called_by_test
end

def self.b=(value)
end

def self.b
end

def self.a
self.b ||= :random
end
end

tp = TracePoint.new(:call, :c_call, :return, :c_return) do |event|
p [event.event, event.method_id]
end

tp.enable do
Operators.test
end
``` </pre>

This is the result:

``` <pre>
[:call, :test]
[:call, :a]
[:call, :b]
[:return, :b]
[:call, :b=]
[:return, :b=]
<---------- Missing [:return, :a]
[:call, :should_be_called_by_test]
[:return, :should_be_called_by_test]
[:return, :test]
</pre>


```
Notice there is a missing :return event for the :a method.

ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]

Back