debugging effectively

61
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe Debugging Effectively Colin O’Dell @colinodell

Upload: colin-odell

Post on 21-Jan-2018

407 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Debugging Effectively

Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe

Debugging EffectivelyColin O’Dell

@colinodell

Page 2: Debugging Effectively

Colin O’Dell

• Lead Web Developer at Unleashed Technologies

• PHP developer since 2002

• PHP League Member• league/commonmark

• league/html-to-markdown

• PHP 7 Upgrade Guide e-book

• @colinodell / www.colinodell.com

Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe

Page 3: Debugging Effectively

Overview

I. Importance of debugging

II. Debugging process

III. Tools & Techniques

IV. Q&A

Photo by Roman Boed // cc by 2.0 // https://flic.kr/p/ngwcf1

Page 4: Debugging Effectively

Debugging is...

Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (adjective)

Page 5: Debugging Effectively

Debugging is...

important

Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m

Page 6: Debugging Effectively

Debugging is...

the single most important skill in

programming.

Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m

Page 7: Debugging Effectively

PlanningCoding

Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC

Page 8: Debugging Effectively

Planning

Testing & Debugging

Coding

Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC

Page 9: Debugging Effectively

Debugging is the process of finding and resolving bugs or defects that prevent correct operation of computer software or a system.

– Wikipedia

Photo by Stephen Dyrgas // cc by-nc-nd 2.0 // https://flic.kr/p/3eTfWU

Page 10: Debugging Effectively

Process is the foundation of effective debugging

Process

Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa

Page 11: Debugging Effectively

Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa

Gain experience with tools and code

Experience

Process

Page 12: Debugging Effectively

Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa

Develop a “sixth sense”

“Sixth Sense”

Experience

Process

Page 13: Debugging Effectively

Junior Developers

• Try the “usual” steps• app/console cache:clear

• composer install

• chmod –R 777 *

• Google the error• Try every solution

• Ask somebody else• Co-worker

• StackOverflow post

• Give up

Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL

Page 14: Debugging Effectively

XY Problem

•I want to solve problem X

•How do I solve X?

Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL

Page 15: Debugging Effectively

XY Problem

•I want to solve problem X

•How do I solve X?

•Solution Y might work

•How can I do Y?

Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL

Page 16: Debugging Effectively

Photo by quattrostagioni // cc by 2.0 // https://flic.kr/p/aGjVq8

1.Don’t parse HTML with regex2.Solve problems the right way

Page 17: Debugging Effectively

“I don’t know why”

“For some reason”

“Doesn’t make sense”

Photo by Stanley Yuu // cc by-nc-nd 2.0 // https://flic.kr/p/pMnfNu

Page 18: Debugging Effectively

Bugs arelogical

Photo by Photofest

Page 19: Debugging Effectively

“The bug is not moving around in your code, trying to trick or evade you. It is just siting in one place,

doing the wrong thing in the same way every time.”

– Nick Parlante, Debugging Zen

Photo by GrahamC57 // cc by-nc-nd 2.0 // https://flic.kr/p/cwJi9Q

Page 20: Debugging Effectively

Assume your code is the problem

Photo by Sergio Flores Rosales // cc by-nc-nd 2.0 // https://flic.kr/p/5UHkaW

Page 21: Debugging Effectively

Systematic Approach

1. Gather information

2. Replicate the issue

3. Identify the culprit

4. Fix it & re-test

5. Mitigate future occurrences

Photo from EduSpiral // cc by-nc-nd 3.0

Page 22: Debugging Effectively

• Expected behaviorvs. actual behavior

• Error messages

• Stack traces

Photo from youmustdesireit.wordpress.com

• Screenshots

•Browser & OS

•Date & time

• Log entries

1. Gather Information

Page 23: Debugging Effectively

2. Replicate the Issue

Be able to replicate with 100% certainty

Photo by Nick Royer // cc by-sa // https://flic.kr/p/d41ASC

Page 24: Debugging Effectively

• Be methodical

• Make no assumptions

• Understand the bug

Photo by U.S. Navy // cc 2.0 // https://flic.kr/p/n6Wgks

3. Identify the Culprit

Page 25: Debugging Effectively

• Attempt to replicate again

• Avoid XY problem

• No temporary workarounds!• Add technical debt

• May introduce other issues

• Never get replaced with true solutions

Photo by Jeff Eaton // cc by-sa 2.0 // https://flic.kr/p/b33rSx

4. Fix & Re-test

Page 26: Debugging Effectively

5. Mitigate Future Occurrences

•Add an automated test

• Share your new knowledge• Project documentation• Blog post• StackOverflow

• Submit patch upstream

Photo by marcokalmann // cc by-nc-nd 2.0 // https://flic.kr/p/4CqLMQ

Page 27: Debugging Effectively

Recap

1. Gather information

2. Replicate the issue

3. Identify the culprit

4. Fix it & re-test

5. Mitigate future occurrences

Photo from EduSpiral // cc by-nc-nd 3.0

Page 28: Debugging Effectively

Long-Term Results

• Gain experience

• Learn how the system works

• Build heuristics

• Boost confidence

Photo by Glenn Beltz // cc by 2.0 // https://flic.kr/p/i7Csdx

Page 29: Debugging Effectively

Tools &Techniques

Photo by Alan // cc by-nc-sa 2.0 // https://flic.kr/p/9azLii

Page 30: Debugging Effectively

Two essential tools

• Integrated developmentenvironment (IDE)

• Interactive debugger

Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC

Page 31: Debugging Effectively

Integrated Development Environment

• Minimum features:• Syntax highlighting• Auto-completion• Fast code navigation• Debugger

Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC

Page 32: Debugging Effectively

Interactive Debugger

• Pause code execution• Breakpoints• Conditional breakpoints

• Step through execution

• Examine variables

• Explore call stack

Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC

Page 34: Debugging Effectively

Techniques

1. Trace backwards from known issue

2. Divide & conquer

3. Use tools

4. Get help

5. Take a break

Photo by Massmo Relsig // cc by-nc-nd 2.0 // https://flic.kr/p/pFrJCe

Page 35: Debugging Effectively

1. Trace backwards•Use a debugger

• Identify source of error

•Establish context

•Work backwards

Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw

Page 36: Debugging Effectively

1. Trace backwardsa()

b()

c()

d()

Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw

Page 37: Debugging Effectively

1. Trace backwards

a()

b()

c()

d()

Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw

Page 38: Debugging Effectively

2. Divide & Conquer

• Identify different code sections

• Set breakpoints at the boundaries

• Isolate issue to one particular area

• Focus efforts on that area

Page 39: Debugging Effectively
Page 40: Debugging Effectively
Page 41: Debugging Effectively
Page 42: Debugging Effectively

X

Page 43: Debugging Effectively
Page 44: Debugging Effectively

3. Use tools

• VarDumper

• Debug toolbars

• Console utility

• Profilers

• git bisect

Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC

•netcat•curl• strace•etc.

Page 45: Debugging Effectively

VarDumperPhoto by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe

Twig:{{ dump(foo) }}{% dump foo %}

PHP:dump($somevar);

Page 46: Debugging Effectively

Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe

Debug toolbars

Page 47: Debugging Effectively

Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe

Console Utility

Symfony: bin/consoleDrupal: drush

Drupal ConsoleMagento: n98-magerunLaravel: artisan

Page 48: Debugging Effectively

Performance Profiling

Identify slowness:• Bottlenecks• Resource hogs• Inefficient code

Photo by Alan Stark // cc by-sa 2.0 // https://flic.kr/p/dn3qjx

Tools:• Blackfire (freemium)• New Relic (freemium)• xhprof (open-source)

Page 49: Debugging Effectively

git bisect

v1.7 ? ? ? ? ? HEAD

Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm

Page 50: Debugging Effectively

git bisect

v1.7 ? ? BAD ? ? HEAD

Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm

Page 51: Debugging Effectively

git bisect

v1.7 ? ? BAD BAD BAD HEAD

Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm

Page 52: Debugging Effectively

git bisect

v1.7 GOOD ? BAD BAD BAD HEAD

Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm

Page 53: Debugging Effectively

git bisect

v1.7 GOOD X BAD BAD BAD HEAD

Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm

abcd123 is the first bad commit

Page 54: Debugging Effectively

netcat

Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe

Page 55: Debugging Effectively

4. Get help

•RTFM / RTFD

•Project forums or issue queue

• StackOverflow, IRC, etc.

•Ask a colleague• Expert in that area• Senior developer

•Rubber ducking

Photo by Hiromitsu Morimoto // cc by-sa 2.0 // https://flic.kr/p/6Vzzaa

Page 56: Debugging Effectively

5. Take a break

• Clear your mind; start fresh

• Forget invalid assumptions

• Recharge your batteries

• Let your subconscious work on it

Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/cFEcDC

Page 57: Debugging Effectively

Four things to walk away with

1. Computers aren’t random,and neither are bugs

2. Persistence will always pay off

3. Don’t be afraid to dive deep

4. Don’t make assumptions ortake things for granted

Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/dvEpfY

Page 58: Debugging Effectively

Questions?

Photo by Marcello Maria Perongini // cc by-nc-nd 2.0 // https://flic.kr/p/6KDtm

Page 59: Debugging Effectively

Learn More• https://web.duke.edu/cps001/notes/Debugging.pdf

• http://www.fiveminutegeekshow.com/20

• http://blog.codeunion.io/2014/09/03/teaching-novices-how-to-debug-code/

• https://www.jetbrains.com/phpstorm/help/debugging.html

• http://symfony.com/doc/current/components/var_dumper/introduction.html

• http://www.sitepoint.com/debugging-git-blame-bisect/

• http://unix.stackexchange.com/a/50099/80744

• http://codeception.com/docs/01-Introduction

• http://chadfowler.com/blog/2014/01/26/the-magic-of-strace/

• http://c2.com/cgi/wiki?RubberDucking

Photo by Samantha Marx // cc by 2.0 // https://flic.kr/p/8KrU1R

Page 60: Debugging Effectively

Thanks!

Feedback?

• https://joind.in/talk/f3c6c

• @colinodell

Photo by Steve Rotman // cc by-nc-nd 2.0 // https://flic.kr/p/xiBK

Page 61: Debugging Effectively