This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Generating and Understanding Tracebacks | ||
---|---|---|
Code | Expected | Actual |
def raise_exception raise Exception, 'You wanted me to raise an exception, so...' end begin raise_exception rescue Exception => e puts "Backtrace of the exception:\n #{e.backtrace.join("\n ")}" end |
Backtrace of the exception: (irb):2:in `raise_exception' (irb):5:in `irb_binding' /usr/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding' :0 |
Backtrace of the exception: (irb):2:in `raise_exception' (irb):5:in `irb_binding' /usr/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding' /usr/lib/ruby/1.8/irb/workspace.rb:52 |
CALLER_RE = /(.*):([0-9]+)(:in \`(.*)')?/ def parse_caller(l) l.collect do |c| captures = CALLER_RE.match(c) [captures[1], captures[2], captures[4]] end end begin raise_exception rescue Exception => e puts "Exception history:" first = true parse_caller(e.backtrace).each do |file, line, method| puts %{ #{first ? "L" : "because l"}ine #{line} in "#{file}"} + %{ called "#{method}" } first = false end end |
Exception history: Line 2 in "(irb)" called "raise_exception" because line 24 in "(irb)" called "irb_binding" because line 52 in "/usr/lib/ruby/1.8/irb/workspace.rb" called "irb_binding" because line 0 in "" called "" |
Exception history: Line 2 in "(irb)" called "raise_exception" because line 17 in "(irb)" called "irb_binding" because line 52 in "/usr/lib/ruby/1.8/irb/workspace.rb" called "irb_binding" because line 52 in "/usr/lib/ruby/1.8/irb/workspace.rb" called "" |