Issue #8538 has been reported by deivid (David Rodríguez).

----------------------------------------
Bug #8538: c method not pushed into the callstack when called, but popped when returned
https://bugs.ruby-lang.org/issues/8538

Author: deivid (David Rodríguez)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 2.0.0p195 (2013-05-14) [i686-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


See the following example:

    trace = TracePoint.new do |tp|
      puts "Event: #{tp.event}, Method: #{tp.method_id}\n"
      puts "Stack: #{caller}\n\n"
    end

    trace.enable

    fail "bang!"

The output shows:

    Event: c_return, Method: enable
    Stack: ["trace.rb:6:in `<main>'"]

    Event: line, Method: 
    Stack: ["trace.rb:8:in `<main>'"]

    Event: c_call, Method: fail
    Stack: ["trace.rb:8:in `<main>'"]

    Event: c_call, Method: new
    Stack: ["trace.rb:8:in `fail'", "trace.rb:8:in `<main>'"]

    Event: c_call, Method: initialize
    Stack: ["trace.rb:8:in `new'", "trace.rb:8:in `fail'", "trace.rb:8:in `<main>'"]

    Event: c_return, Method: initialize
    Stack: ["trace.rb:8:in `new'", "trace.rb:8:in `fail'", "trace.rb:8:in `<main>'"]

    Event: c_return, Method: new
    Stack: ["trace.rb:8:in `fail'", "trace.rb:8:in `<main>'"]

    Event: c_call, Method: backtrace
    Stack: ["trace.rb:8:in `<main>'"]

    Event: c_return, Method: backtrace
    Stack: ["trace.rb:8:in `<main>'"]

    Event: raise, Method: 
    Stack: ["trace.rb:8:in `<main>'"]

    Event: c_return, Method: fail
    Stack: ["trace.rb:8:in `<main>'"]

    trace.rb:8:in `<main>': bang! (RuntimeError)

It looks like the method "initialize" is not pushed into the stack when called, but something (the previous method call) is popped when returning from it.

Thanks a lot.


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