From: "deivid (David Rodríguez)" Date: 2013-06-27T17:23:50+09:00 Subject: [ruby-core:55668] [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). "no replies after 10 days" reminder. This is affecting https://github.com/deivid-rodriguez/byebug, I can easily make it crash by doing: davidr@pantani:~/Proyectos/byebug$ ruby -Ilib -rbyebug -e 'byebug; fail "Bang!"' -e @ 1 (byebug) catch Exception Catch exception Exception. (byebug) c Catchpoint at -e:1: `Bang!' (RuntimeError) from /home/davidr/Proyectos/byebug/lib/byebug/context.rb:44:in `at_catchpoint' from -e:1:in `
' -e @ 1 (byebug) bt --> #0
at -e:1 INTERNAL ERROR!!! That frame doesn't exist! /home/davidr/Proyectos/byebug/lib/byebug/commands/frame.rb:90:in `frame_file' /home/davidr/Proyectos/byebug/lib/byebug/commands/frame.rb:90:in `print_frame' /home/davidr/Proyectos/byebug/lib/byebug/commands/frame.rb:85:in `block in print_backtrace' /home/davidr/Proyectos/byebug/lib/byebug/commands/frame.rb:84:in `each' /home/davidr/Proyectos/byebug/lib/byebug/commands/frame.rb:84:in `print_backtrace' /home/davidr/Proyectos/byebug/lib/byebug/commands/frame.rb:127:in `execute' /home/davidr/Proyectos/byebug/lib/byebug/processor.rb:260:in `one_cmd' /home/davidr/Proyectos/byebug/lib/byebug/processor.rb:244:in `block (2 levels) in process_commands' /home/davidr/Proyectos/byebug/lib/byebug/processor.rb:243:in `each' /home/davidr/Proyectos/byebug/lib/byebug/processor.rb:243:in `block in process_commands' /home/davidr/Proyectos/byebug/lib/byebug/processor.rb:236:in `catch' /home/davidr/Proyectos/byebug/lib/byebug/processor.rb:236:in `process_commands' /home/davidr/Proyectos/byebug/lib/byebug/processor.rb:158:in `at_line' (eval):5:in `block in at_line' (eval):3:in `synchronize' (eval):3:in `at_line' /home/davidr/Proyectos/byebug/lib/byebug/context.rb:52:in `at_line' -e:1:in `
'-e:1:in `
': Bang! (RuntimeError) When the raise event comes, byebug thinks the stack size is 2 but there's only one element. I think this is caused by the inconsistent behaviour explained above. Thanks a lot guys! ---------------------------------------- Bug #8538: c method not pushed into the callstack when called, but popped when returned https://bugs.ruby-lang.org/issues/8538#change-40173 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 `
'"] 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/