From: "deivid (David Rodríguez)" Date: 2013-06-30T22:18:09+09:00 Subject: [ruby-core:55713] [ruby-trunk - Bug #8538] c method not pushed into the callstack when called, but popped when returned Issue #8538 has been updated by deivid (David Rodr��guez). =begin Thanks, @ko1. I commented the other issue, I think it's not the same thing. I'm adding the actual output versus the expected output to try make this more clear. tp = TracePoint.new do |tp| warn "%-8s %-11p %s" % [tp.event, tp.method_id, caller] end tp.enable raise "bang!" # Actual output # c_return :enable ["bt_test.rb:4:in `
'"] # line nil ["bt_test.rb:6:in `
'"] # c_call :raise ["bt_test.rb:6:in `
'"] # c_call :new ["bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_call :initialize ["bt_test.rb:6:in `new'", "bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_return :initialize ["bt_test.rb:6:in `new'", "bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_return :new ["bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_call :backtrace ["bt_test.rb:6:in `
'"] # c_return :backtrace ["bt_test.rb:6:in `
'"] # raise nil ["bt_test.rb:6:in `
'"] # c_return :raise ["bt_test.rb:6:in `
'"] # bt_test.rb:6:in `
': bang! (RuntimeError) # Expected output # c_return :enable ["bt_test.rb:4:in `
'"] # line nil ["bt_test.rb:6:in `
'"] # c_call :raise ["bt_test.rb:6:in `
'"] # c_call :new ["bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_call :initialize ["bt_test.rb:6:in `new'", "bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_return :initialize ["bt_test.rb:6:in `initialize'", "bt_test.rb:6:in `new'", "bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_return :new ["bt_test.rb:6:in `new'", "bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_call :backtrace ["bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_return :backtrace ["bt_test.rb:6:in `backtrace'", "bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # raise nil ["bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # c_return :raise ["bt_test.rb:6:in `raise'", "bt_test.rb:6:in `
'"] # bt_test.rb:6:in `
': bang! (RuntimeError) =end ---------------------------------------- Bug #8538: c method not pushed into the callstack when called, but popped when returned https://bugs.ruby-lang.org/issues/8538#change-40207 Author: deivid (David Rodr��guez) Status: Open Priority: Normal Assignee: ko1 (Koichi Sasada) Category: core Target version: current: 2.1.0 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 `
'"] Event: line, Method: Stack: ["trace.rb:8:in `
'"] Event: c_call, Method: fail Stack: ["trace.rb:8:in `
'"] Event: c_call, Method: new Stack: ["trace.rb:8:in `fail'", "trace.rb:8:in `
'"] Event: c_call, Method: initialize Stack: ["trace.rb:8:in `new'", "trace.rb:8:in `fail'", "trace.rb:8:in `
'"] Event: c_return, Method: initialize Stack: ["trace.rb:8:in `new'", "trace.rb:8:in `fail'", "trace.rb:8:in `
'"] Event: c_return, Method: new Stack: ["trace.rb:8:in `fail'", "trace.rb:8:in `
'"] Event: c_call, Method: backtrace Stack: ["trace.rb:8:in `
'"] Event: c_return, Method: backtrace Stack: ["trace.rb:8:in `
'"] Event: raise, Method: Stack: ["trace.rb:8:in `
'"] Event: c_return, Method: fail Stack: ["trace.rb:8:in `
'"] trace.rb:8:in `
': 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/