Skip to content

broken exception backtraces #2902

@yregelman

Description

@yregelman
def raise_func
  raise "noise"
end

def err_func
  raise_func
end

def use_some_more_stack
  puts "used some more stack"
end

def use_some_stack
  puts "used some stack"
  use_some_more_stack
end

def func1
  begin
    err_func
  rescue => e
    use_some_stack
    e.backtrace.each { |entry|
      p entry
    }
  end
end

def func2
  begin
    err_func
  rescue => e
    e.backtrace.each { |entry|
      p entry
    }
  end
end


func1
func2

$>ruby broken_backtrace.rb
used some stack
used some more stack
"broken_backtrace.rb:2:in raise_func"
"broken_backtrace.rb:6:in err_func"
"broken_backtrace.rb:20:in func1"
"broken_backtrace.rb:40:in main"
"broken_backtrace.rb:2:in raise_func"
"broken_backtrace.rb:6:in err_func"
"broken_backtrace.rb:31:in func2"
"broken_backtrace.rb:41:in main"

$>mruby broken_backtrace.rb
used some stack
used some more stack
"broken_backtrace.rb:10:in Object.use_some_more_stack"
"broken_backtrace.rb:23:in Object.func1"
"broken_backtrace.rb:40"
"broken_backtrace.rb:2:in Object.raise_func"
"broken_backtrace.rb:33:in Object.func2"
"broken_backtrace.rb:41

I see several discrepancies:

  1. err_func is not mentioned in the backtraces given by mruby
  2. line numbers differ for 'func1' and 'func2' entries between mruby and ruby
  3. in backtrace for 'func1', 'raise_func' is replaced by 'use_some_more_stack' even though it was not on the call stack when the exception was thrown, but was called right before printing the backstack

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions