Bug #1593: Exception backtrace within eval lacks topmost function
http://redmine.ruby-lang.org/issues/show/1593

Author: Chris Howlett
Status: Open, Priority: Normal
ruby -v: ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

Hi,

I have a code snippet which uses eval to execute a Ruby fragment, protected with begin...rescue. If I attempt to display the exception backtrace within the rescue branch, the topmost line of context is missing. For instance:

except.rb:
  def foo()
    bar()
  end

  def bar()
    baz()
  end

  def baz()
    raise "Boom"
  end

  puts "Direct call."
  begin
    foo
  rescue => e
    puts e.backtrace
  end

  puts "\nThrough eval."
  begin
    eval "foo"
  rescue => e
    puts e.backtrace
  end

Running this code produces:
  \lib>except.rb
  Direct call.
  /lib/except.rb:10:in `baz'
  /lib/except.rb:6:in `bar'
  /lib/except.rb:2:in `foo'
  /lib/except.rb:15

  Through eval.
  /lib/except.rb:22
  /lib/except.rb:6:in `bar'
  /lib/except.rb:2:in `foo'
  (eval):1

Note that in the eval case, `baz' is not present in the backtrace.


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