Issue #9321 has been updated by David Rodrguez.


Hi @koichi, I'm still running into this issue... :( I really don't know what's going on, because the tests pass in ruby's test suite, but the `c_return` event is not generated when I use the TracePoint API.

    require 'minitest/autorun'

    class TestTracePoint < Minitest::Test
      def test_method_missing
        events = []
        assert !respond_to?(:missing_method_59398)
        TracePoint.new(:c_call, :c_return, :call, :return) { |tp|
          events << [tp.event, tp.method_id] if tp.method_id == :method_missing
        }.enable {
          missing_method_59398 rescue nil
        }
        assert_equal([[:c_call, :method_missing], [:c_return, :method_missing]], events)
      end
    end

    $ ruby --version
    ruby 2.1.1p76 (2014-02-24 revision 45161) [i686-linux]

    $ ruby test_tracepoint.rb 
    Run options: --seed 31045

    # Running:

    F

    Finished in 0.035420s, 28.2322 runs/s, 56.4645 assertions/s.

      1) Failure:
    TestTracePoint#test_method_missing [test_tracepoint.rb:12]:
    --- expected
    +++ actual
    @@ -1 +1 @@
    -[[:c_call, :method_missing], [:c_return, :method_missing]]
    +[[:c_call, :method_missing]]

   
    1 runs, 2 assertions, 1 failures, 0 errors, 0 skips

Also I have a couple of failing tests in byebug's test suite because of this. https://travis-ci.org/deivid-rodriguez/byebug/jobs/21874423

Thanks a lot.

----------------------------------------
Bug #9321: rb_mod_const_missing does not generate a c-return event
https://bugs.ruby-lang.org/issues/9321#change-46007

* Author: Stefan Kaes
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: core
* Target version: 
* ruby -v: ruby 2.1.0p1 (2013-12-26 revision 44431) [x86_64-darwin12.0]
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
We have had an issue reported for ruby-prof where execution times were attributed incorrectly in the call graph.

It turned out that the problem is caused by a missing c-return event for Module#const_missing.

ruby-prof simulates the ruby call stack by subscribing to line, call, c-call, return and c-return events.

Obviously, the missing return throws ruby-prof off the track.


---Files--------------------------------
rb_mod_const_missing.patch (643 Bytes)
rb_mod_const_missing_with_tests.patch (1.48 KB)
rb_mod_const_missing_with_tests_redefined.patch (3.01 KB)


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