Where is this method defined?
m = Foo.new.method(:do_stuff)
m.source_location
=> [filename, line_number]
Friday, November 15, 13
Slide 64
Slide 64 text
“Ideas are tested by experiment.
That is the core of science.”
- Zombie Richard Feynman
(via xkcd)
Friday, November 15, 13
Slide 65
Slide 65 text
Experiment with
small pieces of the code
in IRB or Pry
Friday, November 15, 13
Slide 66
Slide 66 text
Focus on what’s
changed
since the problem started
Friday, November 15, 13
Slide 67
Slide 67 text
A few Git tricks
Friday, November 15, 13
Slide 68
Slide 68 text
test on a different branch
or a different commit
Friday, November 15, 13
Slide 69
Slide 69 text
git bisect
binary search through your
commits to figure out when the
problem started!
Friday, November 15, 13
Slide 70
Slide 70 text
Running git bisect manually
$ git bisect start
$ git bisect good SHA
$ git bisect bad HEAD
Friday, November 15, 13
Slide 71
Slide 71 text
Running git bisect
automatically
$ git bisect start HEAD HEAD~10
$ git bisect run rspec spec/
Friday, November 15, 13
Slide 72
Slide 72 text
git blame
(not actually
for blaming
people!)
Friday, November 15, 13
Slide 73
Slide 73 text
The person who wrote this code
may have been an idiot.
Or they may have been
a mad genius.
Friday, November 15, 13
Slide 74
Slide 74 text
Look at the original context
$ git blame -L(range) filename
$ git show SHA
Friday, November 15, 13
Slide 75
Slide 75 text
But what about whitespace
changes?
$ git blame -w filename
(ignores whitespace)
Friday, November 15, 13
Slide 76
Slide 76 text
But what about lines that were
just copied or moved?
$ git blame -wCCC filename
-w ignores whitespace
-C detects moved/copied lines
-CCC is like -C, but tries harder
Friday, November 15, 13
Slide 77
Slide 77 text
$ git log -p
Includes patches, not just
commit messages.
You can search with /
search_string
Friday, November 15, 13
Slide 78
Slide 78 text
$ git log -p -S “test string”
Lists only commits where that
string was added or deleted
(with patches).
Friday, November 15, 13
Pry
https://github.com/pry/pry
https://github.com/pry/pry/
wiki/Available-plugins
Friday, November 15, 13
Slide 82
Slide 82 text
ls - list methods on an object
cd - into objects
wtf? - backtrace
show-doc - prints docs
show-method - prints source
whereami - no really
Pry
Friday, November 15, 13
Slide 83
Slide 83 text
binding.pry if @whatevs
Friday, November 15, 13
Slide 84
Slide 84 text
Pry-remote
https://github.com/mon-ouie/
pry-remote
Friday, November 15, 13
Slide 85
Slide 85 text
binding.pry_remote
$ pry-remote
Friday, November 15, 13
Slide 86
Slide 86 text
Better Errors
https://github.com/charliesome/
better_errors
Friday, November 15, 13
Slide 87
Slide 87 text
Friday, November 15, 13
Slide 88
Slide 88 text
WHEN THINGS GET REALLY
WEIRD
Friday, November 15, 13
Slide 89
Slide 89 text
This shouldn’t make a difference,
but let’s try it just in case...
Friday, November 15, 13
Slide 90
Slide 90 text
Friday, November 15, 13
Slide 91
Slide 91 text
It doesn’t count if
you’re right by accident
Friday, November 15, 13
Slide 92
Slide 92 text
“That’s clever. Is it clever?”
“...why is it clever?”
Friday, November 15, 13
Slide 93
Slide 93 text
If you don’t understand the cause
of the problem, it’s not fixed,
because you can’t predict when it
might come up again.
Friday, November 15, 13
Slide 94
Slide 94 text
Don’t be afraid to read the source
Friday, November 15, 13
Slide 95
Slide 95 text
$ bundle open gem_name
Friday, November 15, 13
Slide 96
Slide 96 text
occasionally
the compiler
(Rarely! But it happens.)
Friday, November 15, 13
Slide 97
Slide 97 text
Friday, November 15, 13
Slide 98
Slide 98 text
Friday, November 15, 13
Slide 99
Slide 99 text
“You know my methods, Watson.”
Friday, November 15, 13
Slide 100
Slide 100 text
THE SCIENCE OF DEDUCTION
[email protected] • @DanielleSucher
DEBUGGING
thank you!
Friday, November 15, 13