Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Defly
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Andrew Liu
August 27, 2011
Programming
390
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Defly
A debug tool for Ruby
Andrew Liu
August 27, 2011
More Decks by Andrew Liu
See All by Andrew Liu
Facebook Graph API
eggegg
7
700
HTTP
eggegg
17
1.5k
Version Control System - Git
eggegg
4
710
Introduction to Ruby
eggegg
3
660
Other Decks in Programming
See All in Programming
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.7k
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
120
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
440
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
370
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2k
Heart of Swift Concurrency
koher
0
250
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
780
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
450
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
890
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
180
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
170
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.7k
sira's awesome portfolio website redesign presentation
elsirapls
0
410
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
900
The browser strikes back
jonoalderson
0
1.7k
Optimizing for Happiness
mojombo
378
71k
Building Adaptive Systems
keathley
44
3.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
For a Future-Friendly Web
brad_frost
183
10k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.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?