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 `<main>'
    -e @ 1
    (byebug) bt
    --> #0  <main> 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 `<main>'-e:1:in `<main>': 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 `<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/