📄 05 - generating and understanding tracebacks.rb
字号:
#!/usr/bin/ruby # 1 # delegation.rb # 2 class CEO # 3 def CEO.new_vision # 4 Manager.implement_vision # 5 end # 6end # 7 # 8class Manager # 9 def Manager.implement_vision # 10 Engineer.do_work # 11 end # 12end # 13 # 14class Engineer # 15 def Engineer.do_work # 16 puts 'How did I get here?' # 17 first = true # 18 caller.each do |c| # 19 puts %{#{(first ? 'I' : ' which')} was called by "#{c}"} # 20 first = false # 21 end # 22 end # 23end # 24 # 25CEO.new_vision # 26#---$ ./delegation.rbHow did I get here?I was called by "delegation.rb:11:in `implement_vision'" which was called by "delegation.rb:5:in `new_vision'" which was called by "delegation.rb:26"#---def raise_exception raise Exception, 'You wanted me to raise an exception, so...'endbegin raise_exceptionrescue 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#---CALLER_RE = /(.*):([0-9]+)(:in \`(.*)')?/def parse_caller(l) l.collect do |c| captures = CALLER_RE.match(c) [captures[1], captures[2], captures[4]] endendbegin raise_exceptionrescue 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 endend# 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 ""#---
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -