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:
- err_func is not mentioned in the backtraces given by mruby
- line numbers differ for 'func1' and 'func2' entries between mruby and ruby
- 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
$>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: