Project

General

Profile

Backport #1593

Updated by jeremyevans0 (Jeremy Evans) over 4 years ago

=begin 
  
  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. 
 
 =end 
 

Back