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
1から理解するWeb Push
dora1998
7
1.9k
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
230
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
480
Testing Trophyは叫ばない
toms74209200
0
890
OSS開発者という働き方
andpad
5
1.7k
The Past, Present, and Future of Enterprise Java with ASF in the Middle
ivargrimstad
0
180
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2.5k
🔨 小さなビルドシステムを作る
momeemt
4
690
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
310
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
130
AI Agents: How Do They Work and How to Build Them @ Shift 2025
slobodan
0
110
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
51k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Docker and Python
trallard
46
3.6k
Building Applications with DynamoDB
mza
96
6.6k
Navigating Team Friction
lara
189
15k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
KATA
mclloyd
32
14k
The Language of Interfaces
destraynor
161
25k
RailsConf 2023
tenderlove
30
1.2k
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?