Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Defly
Search
Andrew Liu
August 27, 2011
Programming
0
340
Defly
A debug tool for Ruby
Andrew Liu
August 27, 2011
Tweet
Share
More Decks by Andrew Liu
See All by Andrew Liu
Facebook Graph API
eggegg
7
650
HTTP
eggegg
17
1.5k
Version Control System - Git
eggegg
4
670
Introduction to Ruby
eggegg
3
590
Other Decks in Programming
See All in Programming
Go言語はstack overflowの夢を見るか?
logica0419
0
510
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
130
コード生成なしでモック処理を実現!ovechkin-dm/mockioで学ぶメタプログラミング
qualiarts
0
240
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
550
CSC509 Lecture 06
javiergs
PRO
0
260
CSC305 Lecture 06
javiergs
PRO
0
270
『毎日の移動』を支えるGoバックエンド内製開発
yutautsugi
2
270
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2.5k
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
520
スマホから Youtube Shortsを見られないようにする
lemolatoon
27
33k
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
180
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.3k
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Side Projects
sachag
455
43k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Visualization
eitanlees
149
16k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Agile that works and the tools we love
rasmusluckow
331
21k
Automating Front-end Workflow
addyosmani
1371
200k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
Building an army of robots
kneath
306
46k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Transcript
Defly Debugging and Tracing Tool for Ruby http://github.com/eggegg/defly
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 Warrior attr_accessor :hp, :mp def sleep self.hp += 10
self.mp += 2 end end
class Warrior attr_accessor :hp, :mp def sleep puts "BEFORE: #{@hp},
#{@mp}" self.hp += 10 puts "AFTER ADDING HP: #{@hp}, #{@mp}" self.mp += 2 puts "AFTER ADDING MP: #{@hp}, #{@mp}" end end
class Warrior attr_accessor :hp, :mp def sleep self.hp += 10
self.mp += 2 end end require 'defly' Warrior.debug! Warrior.new.trace([:hp, :hp=, :mp, :mp=, :sleep], [:@hp, :@mp]) do |warrior| warrior.hp = 10 warrior.mp = 20 warrior.sleep end
Tracing hp, hp=, mp, mp=, sleep on Warrior instance Tracing
@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
NoMethodError debugging = nil debugging.is_annoying irb(main):001:0> require 'bug' NoMethodError: undefined
method `is_annoying' for nil:NilClass from /Users/eggegg/bug.rb:2:in `<top (required)>' ... bug.rb irb Where is the bug???
irb(main):003:0> require 'defly' => true irb(main):004:0> require 'bug' NoMethodError: undefined
method `is_annoying' for nil:NilClass bug.rb:2> debugging.<<is_annoying>> from /Users/andrewliu/bug.rb:2:in `<top (required)>'
Inspecting Errors class Rocket def launch! @reason = "Bugs invasion"
raise "Engine Fail" end end Rocket.debug! rocket = Rocket.new rocket.watch_error "Engine Fail" rocket.launch!
>>>>> Error received: "Engine Fail" >>>>> #<Rocket:0(0)>> @reason => "Bugs
invasion" #<Rocket:0(0)>> Ruby shell (Rib by godfat) to inspect errors!
Thanks! Any Question?