A debug tool for Ruby
DeflyDebugging and Tracing Tool for Rubyhttp://github.com/eggegg/defly
View Slide
Andrew Liu 劉彥廷• College Student• Intern @ Cardinalblue• eggegg @ github• Ruby, iOS, Android• [email protected]
gem install defly
Defly is for...• Trace method calls• Trace instance variables• Better error messages• Inspect the point of error
class Warriorattr_accessor :hp, :mpdef sleepself.hp += 10self.mp += 2endend
class Warriorattr_accessor :hp, :mpdef sleepputs "BEFORE: #{@hp}, #{@mp}"self.hp += 10puts "AFTER ADDING HP: #{@hp}, #{@mp}"self.mp += 2puts "AFTER ADDING MP: #{@hp}, #{@mp}"endend
class Warriorattr_accessor :hp, :mpdef sleepself.hp += 10self.mp += 2endendrequire 'defly'Warrior.debug!Warrior.new.trace([:hp, :hp=, :mp, :mp=, :sleep],[:@hp, :@mp]) do |warrior|warrior.hp = 10warrior.mp = 20warrior.sleepend
Tracing hp, hp=, mp, mp=, sleep on Warrior instanceTracing @hp, @mp on Warrior instance<<<<< Warrior#hp=(10) # (irb):14:in `block in irb_binding'@hp = 10 # undefined@mp = nil # undefined>>>>> 10<<<<< Warrior#mp=(20) # (irb):15:in `block in irb_binding'@mp = 20 # undefined>>>>> 20<<<<< Warrior#sleep() # (irb):16:in `block in irb_binding'<<<<< Warrior#hp() # (irb):7:in `sleep'>>>>> 10<<<<< Warrior#hp=(20) # (irb):7:in `sleep'@hp = 20 # 10 -> 20>>>>> 20<<<<< Warrior#mp() # (irb):8:in `sleep'>>>>> 20<<<<< Warrior#mp=(22) # (irb):8:in `sleep'@mp = 22 # 20 -> 22>>>>> 22>>>>> 22
NoMethodErrordebugging = nildebugging.is_annoyingirb(main):001:0> require 'bug'NoMethodError: undefined method `is_annoying' for nil:NilClassfrom /Users/eggegg/bug.rb:2:in `'...bug.rbirbWhere is the bug???
irb(main):003:0> require 'defly'=> trueirb(main):004:0> require 'bug'NoMethodError: undefined method `is_annoying' for nil:NilClassbug.rb:2> debugging.<>from /Users/andrewliu/bug.rb:2:in `'
Inspecting Errorsclass Rocketdef launch!@reason = "Bugs invasion"raise "Engine Fail"endendRocket.debug!rocket = Rocket.newrocket.watch_error "Engine Fail"rocket.launch!
>>>>> Error received:"Engine Fail">>>>>#> @reason=> "Bugs invasion"#>Ruby shell (Rib by godfat)to inspect errors!
Thanks!Any Question?