Project

General

Profile

Actions

Bug #8538

closed

c method not pushed into the callstack when called, but popped when returned

Added by deivid (David Rodríguez) almost 11 years ago. Updated over 10 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.0.0p195 (2013-05-14) [i686-linux]
[ruby-core:55528]

Description

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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0