Debugging Effectively - php[world] 2015

Colin O'Dell
Colin O'DellLead Web Developer for Unleashed Technologies at Unleashed Technologies
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Debugging Effectively
Colin O’Dell
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Colin O’Dell
• Lead Web Developer at Unleashed Technologies
• PHP developer since 2002
• Certifications: Symfony and Magento
• PHP League Member
• league/commonmark
• league/html-to-markdown
• PHP 7 Upgrade Guide e-book
• @colinodell / www.colinodell.com
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
Debugging is...
Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
(adjective)
Debugging is...
Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m
important
Debugging is...
Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m
the single most
important skill in
programming.
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
PlanningCoding
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
Planning
Testing &
Debugging
Coding
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
Process is the foundation of effective debugging
Process
Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
Gain experience with tools and code
Experience
Process
Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
Develop a “sixth sense”
“Sixth Sense”
Experience
Process
Junior Developers
• Try the “usual” steps
• Clear the cache
• Re-install dependencies
• 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
XY Problem
Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL
•I want to solve problem X
•How do I solve X?
XY Problem
Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL
•I want to solve problem X
•How do I solve X?
•Solution Y might work
•How can I do Y?
Photo by quattrostagioni // cc by 2.0 // https://flic.kr/p/aGjVq8
1.Don’t parse HTML with regex
2.Solve problems the right way
“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
Bugs are logical
Photo by Photofest
“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
Assume your
code is the
problem
Photo by Sergio Flores Rosales // cc by-nc-nd 2.0 // https://flic.kr/p/5UHkaW
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
1. Gather information
• Expected behavior vs.
actual behavior
• Error messages
• Stack traces
Photo from youmustdesireit.wordpress.com
•Screenshots
•Browser & OS
•Date & time
•Log entries
2. Replicate the Issue
Be able to replicate with 100% certainty
Photo by Nick Royer // cc by-sa // https://flic.kr/p/d41ASC
3. Identify the Culprit
Photo by U.S. Navy // cc 2.0 // https://flic.kr/p/n6Wgks
• Be methodical
• Make no assumptions
• Understand the bug
4. Fix it & Re-test
• 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
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
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
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
Tools & Techniques
Photo by Alan // cc by-nc-sa 2.0 // https://flic.kr/p/9azLii
Two essential tools
• Integrated development
environment (IDE)
• Interactive debugger
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
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
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
Debugging Effectively - php[world] 2015
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
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
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
1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
2. Divide & Conquer
• Identify different code sections
• Set breakpoints at the boundaries
• Isolate issue to one particular area
• Focus efforts on that area
Debugging Effectively - php[world] 2015
Debugging Effectively - php[world] 2015
Debugging Effectively - php[world] 2015
✓
X
Debugging Effectively - php[world] 2015
3. Use tools
• Automated tests
• Kint / VarDumper
• Debug toolbars
• Console utility
• Profilers
• git bisect
•netcat
•curl
•etc.
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
Automated Tests
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Kint
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Kint::dump($var);
VarDumper
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Twig:
{{ dump(foo) }}
{% dump foo %}
PHP:
dump($somevar);
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Debug toolbars
Console Utility
Symfony: app/console
Drupal: drush
Magento: n98-magerun.phar
Laravel: artisan
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
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)
Blackfire
Photo by Alan Stark // cc by-sa 2.0 // https://flic.kr/p/dn3qjx
New Relic
Photo by Alan Stark // cc by-sa 2.0 // https://flic.kr/p/dn3qjx
git bisect
v1.7 ? ? ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
git bisect start
git bisect bad
git bisect
v1.7 ? ? ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
git bisect good
git bisect
v1.7 ? ? ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
git bisect bad
git bisect
v1.7 ? ? ? BAD ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
git bisect bad
git bisect
v1.7 ? ? ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
git bisect good
git bisect
v1.7 ? GOOD ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
git bisect good
git bisect
v1.7 GOOD GOOD ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
git bisect
v1.7 GOOD GOOD
X BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
abcd123 is the first bad commit
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
netcat
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
curl
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
5. Take a break
Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/cFEcDC
• Clear your mind; start fresh
• Forget invalid assumptions
• Recharge your batteries
• Let your subconscious work on it
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 or
take things for granted
Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/dvEpfY
Questions?
Photo by Marcello Maria Perongini // cc by-nc-nd 2.0 // https://flic.kr/p/6KDtm
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://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
Thanks!
Feedback?
• https://joind.in/14752
•@colinodell
Photo by Steve Rotman // cc by-nc-nd 2.0 // https://flic.kr/p/xiBK
1 of 72

Recommended

Debugging Effectively - SymfonyLive San Francisco 2015 by
Debugging Effectively - SymfonyLive San Francisco 2015Debugging Effectively - SymfonyLive San Francisco 2015
Debugging Effectively - SymfonyLive San Francisco 2015Colin O'Dell
1.3K views61 slides
Debugging Effectively - PHP UK 2017 by
Debugging Effectively - PHP UK 2017Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Colin O'Dell
1.7K views70 slides
Debugging Effectively - ZendCon 2016 by
Debugging Effectively - ZendCon 2016Debugging Effectively - ZendCon 2016
Debugging Effectively - ZendCon 2016Colin O'Dell
520 views70 slides
Debugging Effectively - SunshinePHP 2017 by
Debugging Effectively - SunshinePHP 2017Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017Colin O'Dell
432 views72 slides
Debugging Effectively by
Debugging EffectivelyDebugging Effectively
Debugging EffectivelyColin O'Dell
1.7K views61 slides
Debugging Effectively - Frederick Web Tech 9/6/16 by
Debugging Effectively - Frederick Web Tech 9/6/16Debugging Effectively - Frederick Web Tech 9/6/16
Debugging Effectively - Frederick Web Tech 9/6/16Colin O'Dell
604 views61 slides

More Related Content

What's hot

Debugging Effectively - DrupalCon Europe 2016 by
Debugging Effectively - DrupalCon Europe 2016Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Europe 2016Colin O'Dell
544 views72 slides
Debugging Effectively - DrupalCon Nashville 2018 by
Debugging Effectively - DrupalCon Nashville 2018Debugging Effectively - DrupalCon Nashville 2018
Debugging Effectively - DrupalCon Nashville 2018Colin O'Dell
830 views70 slides
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors" by
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"🎤 Hanno Embregts 🎸
62 views62 slides
Automate ALL THE THINGS by
Automate ALL THE THINGSAutomate ALL THE THINGS
Automate ALL THE THINGSkitthod
1.4K views105 slides
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys by
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys PROIDEA
32 views86 slides
2012 ASTD TechKnowledge – Tim Martin by
2012 ASTD TechKnowledge – Tim Martin2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim MartinRustici Software
7.8K views55 slides

What's hot(6)

Debugging Effectively - DrupalCon Europe 2016 by Colin O'Dell
Debugging Effectively - DrupalCon Europe 2016Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Europe 2016
Colin O'Dell544 views
Debugging Effectively - DrupalCon Nashville 2018 by Colin O'Dell
Debugging Effectively - DrupalCon Nashville 2018Debugging Effectively - DrupalCon Nashville 2018
Debugging Effectively - DrupalCon Nashville 2018
Colin O'Dell830 views
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors" by 🎤 Hanno Embregts 🎸
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"
Automate ALL THE THINGS by kitthod
Automate ALL THE THINGSAutomate ALL THE THINGS
Automate ALL THE THINGS
kitthod1.4K views
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys by PROIDEA
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
PROIDEA32 views
2012 ASTD TechKnowledge – Tim Martin by Rustici Software
2012 ASTD TechKnowledge – Tim Martin2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim Martin
Rustici Software7.8K views

Viewers also liked

Behat c'est plus que ça | Behat is more than that by
Behat c'est plus que ça | Behat is more than thatBehat c'est plus que ça | Behat is more than that
Behat c'est plus que ça | Behat is more than thatSamuel ROZE
4.7K views47 slides
The Commando Devops by
The Commando DevopsThe Commando Devops
The Commando DevopsFred de Villamil
2.1K views18 slides
Pasos a seguir by
Pasos a seguirPasos a seguir
Pasos a seguirMarga Bio
402 views1 slide
Influencia de la gestión del cambio social en la dinámica de grupos by
Influencia de la gestión del cambio social en la dinámica de gruposInfluencia de la gestión del cambio social en la dinámica de grupos
Influencia de la gestión del cambio social en la dinámica de gruposAl Cougar
612 views21 slides
PHP, ce truc de vieux by
PHP, ce truc de vieuxPHP, ce truc de vieux
PHP, ce truc de vieuxOlivier Mansour
1K views50 slides
Patchwork UTF-8 : portabilité unicode et graphèmes clusters by
Patchwork UTF-8 : portabilité unicode et graphèmes clustersPatchwork UTF-8 : portabilité unicode et graphèmes clusters
Patchwork UTF-8 : portabilité unicode et graphèmes clustersnicolas.grekas
2K views32 slides

Viewers also liked(17)

Behat c'est plus que ça | Behat is more than that by Samuel ROZE
Behat c'est plus que ça | Behat is more than thatBehat c'est plus que ça | Behat is more than that
Behat c'est plus que ça | Behat is more than that
Samuel ROZE4.7K views
Pasos a seguir by Marga Bio
Pasos a seguirPasos a seguir
Pasos a seguir
Marga Bio402 views
Influencia de la gestión del cambio social en la dinámica de grupos by Al Cougar
Influencia de la gestión del cambio social en la dinámica de gruposInfluencia de la gestión del cambio social en la dinámica de grupos
Influencia de la gestión del cambio social en la dinámica de grupos
Al Cougar 612 views
Patchwork UTF-8 : portabilité unicode et graphèmes clusters by nicolas.grekas
Patchwork UTF-8 : portabilité unicode et graphèmes clustersPatchwork UTF-8 : portabilité unicode et graphèmes clusters
Patchwork UTF-8 : portabilité unicode et graphèmes clusters
nicolas.grekas2K views
HTML5 mobile avec Sencha Touch [FR] by Wixiweb
HTML5 mobile avec Sencha Touch [FR]HTML5 mobile avec Sencha Touch [FR]
HTML5 mobile avec Sencha Touch [FR]
Wixiweb3.9K views
jQuery sans jQuery by goldoraf
jQuery sans jQueryjQuery sans jQuery
jQuery sans jQuery
goldoraf5.6K views
Breizhcamp 2014 : Une partie de Cache-Cache by Frederic Bouchery
Breizhcamp 2014 : Une partie de Cache-CacheBreizhcamp 2014 : Une partie de Cache-Cache
Breizhcamp 2014 : Une partie de Cache-Cache
Frederic Bouchery805 views
PHP Tour 2012 - Conférence FuelPHP by Novius OS
PHP Tour 2012 - Conférence FuelPHPPHP Tour 2012 - Conférence FuelPHP
PHP Tour 2012 - Conférence FuelPHP
Novius OS1.4K views
Falling in Love with Forms [Microsoft Edge Web Summit 2015] by Aaron Gustafson
Falling in Love with Forms [Microsoft Edge Web Summit 2015]Falling in Love with Forms [Microsoft Edge Web Summit 2015]
Falling in Love with Forms [Microsoft Edge Web Summit 2015]
Aaron Gustafson24.1K views
Elasticsearch - OSDC France 2012 by David Pilato
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012
David Pilato3.5K views
Le Profiling d'applications PHP - Blackfire.io by nicolas.grekas
Le Profiling d'applications PHP - Blackfire.ioLe Profiling d'applications PHP - Blackfire.io
Le Profiling d'applications PHP - Blackfire.io
nicolas.grekas3.9K views
Maitriser les structures de données PHP 102 - Forum Paris 2012 by Patrick Allaert
Maitriser les structures de données PHP 102 - Forum Paris 2012Maitriser les structures de données PHP 102 - Forum Paris 2012
Maitriser les structures de données PHP 102 - Forum Paris 2012
Patrick Allaert5.3K views
The Real Cost of Slow Time vs Downtime by Radware
The Real Cost of Slow Time vs DowntimeThe Real Cost of Slow Time vs Downtime
The Real Cost of Slow Time vs Downtime
Radware20.3K views
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012 by Jean-Marc Fontaine
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Jean-Marc Fontaine3.5K views

Similar to Debugging Effectively - php[world] 2015

Let the contribution begin by
Let the contribution beginLet the contribution begin
Let the contribution beginSeongJae Park
1.1K views134 slides
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트 by
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트 Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트 Channy Yun
2.4K views28 slides
Let the contribution begin (EST futures) by
Let the contribution begin  (EST futures)Let the contribution begin  (EST futures)
Let the contribution begin (EST futures)SeongJae Park
411 views135 slides
Mom was wrong: Do talk to strangers by
Mom was wrong: Do talk to strangersMom was wrong: Do talk to strangers
Mom was wrong: Do talk to strangersTam Frager
831 views20 slides
The Seven Wastes of Software Development by
The Seven Wastes of Software DevelopmentThe Seven Wastes of Software Development
The Seven Wastes of Software DevelopmentMatt Stine
2.9K views155 slides
Workshop-Build e deploy avançado com Openshift e Kubernetes by
Workshop-Build e deploy avançado com Openshift e KubernetesWorkshop-Build e deploy avançado com Openshift e Kubernetes
Workshop-Build e deploy avançado com Openshift e Kubernetesjuniorjbn
375 views40 slides

Similar to Debugging Effectively - php[world] 2015(20)

Let the contribution begin by SeongJae Park
Let the contribution beginLet the contribution begin
Let the contribution begin
SeongJae Park1.1K views
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트 by Channy Yun
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트 Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트
Channy Yun2.4K views
Let the contribution begin (EST futures) by SeongJae Park
Let the contribution begin  (EST futures)Let the contribution begin  (EST futures)
Let the contribution begin (EST futures)
SeongJae Park411 views
Mom was wrong: Do talk to strangers by Tam Frager
Mom was wrong: Do talk to strangersMom was wrong: Do talk to strangers
Mom was wrong: Do talk to strangers
Tam Frager831 views
The Seven Wastes of Software Development by Matt Stine
The Seven Wastes of Software DevelopmentThe Seven Wastes of Software Development
The Seven Wastes of Software Development
Matt Stine2.9K views
Workshop-Build e deploy avançado com Openshift e Kubernetes by juniorjbn
Workshop-Build e deploy avançado com Openshift e KubernetesWorkshop-Build e deploy avançado com Openshift e Kubernetes
Workshop-Build e deploy avançado com Openshift e Kubernetes
juniorjbn375 views
Git Basics Workshop Summer of Tech 2010 by Y. Thong Kuah
Git Basics Workshop Summer of Tech 2010Git Basics Workshop Summer of Tech 2010
Git Basics Workshop Summer of Tech 2010
Y. Thong Kuah600 views
Making the Web Fireproof: A Building Code for Websites by Dylan Wilbanks
Making the Web Fireproof: A Building Code for WebsitesMaking the Web Fireproof: A Building Code for Websites
Making the Web Fireproof: A Building Code for Websites
Dylan Wilbanks12.5K views
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o... by Ted Won
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Ted Won483 views
BlackBerry 10 Core Native Camera API by Steven Beeckman
BlackBerry 10 Core Native Camera APIBlackBerry 10 Core Native Camera API
BlackBerry 10 Core Native Camera API
Steven Beeckman2.2K views
Seaside Portability by jfitzell
Seaside PortabilitySeaside Portability
Seaside Portability
jfitzell1.2K views
Saving our social_media by kevin_donovan
Saving our social_mediaSaving our social_media
Saving our social_media
kevin_donovan1.8K views
DevOps for Opensource Geospatial Applications by tlpinney
DevOps for Opensource Geospatial ApplicationsDevOps for Opensource Geospatial Applications
DevOps for Opensource Geospatial Applications
tlpinney540 views
We Learn Through Stories at PRIZMAH17 by Darren Kuropatwa
We Learn Through Stories at PRIZMAH17We Learn Through Stories at PRIZMAH17
We Learn Through Stories at PRIZMAH17
Darren Kuropatwa503 views
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017 by MarcinStachniuk
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
MarcinStachniuk305 views
Android build on windows by Addweup
Android build on windowsAndroid build on windows
Android build on windows
Addweup1.6K views

More from Colin O'Dell

Demystifying Unicode - Longhorn PHP 2021 by
Demystifying Unicode - Longhorn PHP 2021Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021Colin O'Dell
263 views116 slides
Releasing High Quality Packages - Longhorn PHP 2021 by
Releasing High Quality Packages - Longhorn PHP 2021Releasing High Quality Packages - Longhorn PHP 2021
Releasing High Quality Packages - Longhorn PHP 2021Colin O'Dell
168 views87 slides
Releasing High Quality PHP Packages - ConFoo Montreal 2019 by
Releasing High Quality PHP Packages - ConFoo Montreal 2019Releasing High Quality PHP Packages - ConFoo Montreal 2019
Releasing High Quality PHP Packages - ConFoo Montreal 2019Colin O'Dell
625 views74 slides
Automating Deployments with Deployer - php[world] 2018 by
Automating Deployments with Deployer - php[world] 2018Automating Deployments with Deployer - php[world] 2018
Automating Deployments with Deployer - php[world] 2018Colin O'Dell
468 views89 slides
Releasing High-Quality Packages - php[world] 2018 by
Releasing High-Quality Packages - php[world] 2018Releasing High-Quality Packages - php[world] 2018
Releasing High-Quality Packages - php[world] 2018Colin O'Dell
326 views73 slides
CommonMark: Markdown Done Right - ZendCon 2017 by
CommonMark: Markdown Done Right - ZendCon 2017CommonMark: Markdown Done Right - ZendCon 2017
CommonMark: Markdown Done Right - ZendCon 2017Colin O'Dell
1.4K views61 slides

More from Colin O'Dell(20)

Demystifying Unicode - Longhorn PHP 2021 by Colin O'Dell
Demystifying Unicode - Longhorn PHP 2021Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021
Colin O'Dell263 views
Releasing High Quality Packages - Longhorn PHP 2021 by Colin O'Dell
Releasing High Quality Packages - Longhorn PHP 2021Releasing High Quality Packages - Longhorn PHP 2021
Releasing High Quality Packages - Longhorn PHP 2021
Colin O'Dell168 views
Releasing High Quality PHP Packages - ConFoo Montreal 2019 by Colin O'Dell
Releasing High Quality PHP Packages - ConFoo Montreal 2019Releasing High Quality PHP Packages - ConFoo Montreal 2019
Releasing High Quality PHP Packages - ConFoo Montreal 2019
Colin O'Dell625 views
Automating Deployments with Deployer - php[world] 2018 by Colin O'Dell
Automating Deployments with Deployer - php[world] 2018Automating Deployments with Deployer - php[world] 2018
Automating Deployments with Deployer - php[world] 2018
Colin O'Dell468 views
Releasing High-Quality Packages - php[world] 2018 by Colin O'Dell
Releasing High-Quality Packages - php[world] 2018Releasing High-Quality Packages - php[world] 2018
Releasing High-Quality Packages - php[world] 2018
Colin O'Dell326 views
CommonMark: Markdown Done Right - ZendCon 2017 by Colin O'Dell
CommonMark: Markdown Done Right - ZendCon 2017CommonMark: Markdown Done Right - ZendCon 2017
CommonMark: Markdown Done Right - ZendCon 2017
Colin O'Dell1.4K views
Rise of the Machines: PHP and IoT - ZendCon 2017 by Colin O'Dell
Rise of the Machines: PHP and IoT - ZendCon 2017Rise of the Machines: PHP and IoT - ZendCon 2017
Rise of the Machines: PHP and IoT - ZendCon 2017
Colin O'Dell2.3K views
Hacking Your Way To Better Security - DrupalCon Baltimore 2017 by Colin O'Dell
Hacking Your Way To Better Security - DrupalCon Baltimore 2017Hacking Your Way To Better Security - DrupalCon Baltimore 2017
Hacking Your Way To Better Security - DrupalCon Baltimore 2017
Colin O'Dell1.4K views
Automating Your Workflow with Gulp.js - php[world] 2016 by Colin O'Dell
Automating Your Workflow with Gulp.js - php[world] 2016Automating Your Workflow with Gulp.js - php[world] 2016
Automating Your Workflow with Gulp.js - php[world] 2016
Colin O'Dell1.3K views
Rise of the Machines: PHP and IoT - php[world] 2016 by Colin O'Dell
Rise of the Machines: PHP and IoT - php[world] 2016Rise of the Machines: PHP and IoT - php[world] 2016
Rise of the Machines: PHP and IoT - php[world] 2016
Colin O'Dell1.6K views
Hacking Your Way to Better Security - ZendCon 2016 by Colin O'Dell
Hacking Your Way to Better Security - ZendCon 2016Hacking Your Way to Better Security - ZendCon 2016
Hacking Your Way to Better Security - ZendCon 2016
Colin O'Dell601 views
Hacking Your Way to Better Security - PHP South Africa 2016 by Colin O'Dell
Hacking Your Way to Better Security - PHP South Africa 2016Hacking Your Way to Better Security - PHP South Africa 2016
Hacking Your Way to Better Security - PHP South Africa 2016
Colin O'Dell959 views
CommonMark: Markdown done right - Nomad PHP September 2016 by Colin O'Dell
CommonMark: Markdown done right - Nomad PHP September 2016CommonMark: Markdown done right - Nomad PHP September 2016
CommonMark: Markdown done right - Nomad PHP September 2016
Colin O'Dell1.1K views
Hacking Your Way To Better Security - Dutch PHP Conference 2016 by Colin O'Dell
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Colin O'Dell863 views
Hacking Your Way To Better Security - php[tek] 2016 by Colin O'Dell
Hacking Your Way To Better Security - php[tek] 2016Hacking Your Way To Better Security - php[tek] 2016
Hacking Your Way To Better Security - php[tek] 2016
Colin O'Dell855 views
CommonMark: Markdown Done Right by Colin O'Dell
CommonMark: Markdown Done RightCommonMark: Markdown Done Right
CommonMark: Markdown Done Right
Colin O'Dell1K views
PHP 7 Crash Course by Colin O'Dell
PHP 7 Crash CoursePHP 7 Crash Course
PHP 7 Crash Course
Colin O'Dell1.2K views
Hacking Your Way To Better Security by Colin O'Dell
Hacking Your Way To Better SecurityHacking Your Way To Better Security
Hacking Your Way To Better Security
Colin O'Dell762 views
Introduction to league/commonmark by Colin O'Dell
Introduction to league/commonmarkIntroduction to league/commonmark
Introduction to league/commonmark
Colin O'Dell818 views
PHP 7 Crash Course - php[world] 2015 by Colin O'Dell
PHP 7 Crash Course - php[world] 2015PHP 7 Crash Course - php[world] 2015
PHP 7 Crash Course - php[world] 2015
Colin O'Dell3.6K views

Recently uploaded

JioEngage_Presentation.pptx by
JioEngage_Presentation.pptxJioEngage_Presentation.pptx
JioEngage_Presentation.pptxadmin125455
8 views4 slides
predicting-m3-devopsconMunich-2023-v2.pptx by
predicting-m3-devopsconMunich-2023-v2.pptxpredicting-m3-devopsconMunich-2023-v2.pptx
predicting-m3-devopsconMunich-2023-v2.pptxTier1 app
12 views33 slides
Programming Field by
Programming FieldProgramming Field
Programming Fieldthehardtechnology
6 views9 slides
Quality Engineer: A Day in the Life by
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the LifeJohn Valentino
7 views18 slides
Introduction to Maven by
Introduction to MavenIntroduction to Maven
Introduction to MavenJohn Valentino
6 views10 slides
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... by
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...TomHalpin9
6 views29 slides

Recently uploaded(20)

JioEngage_Presentation.pptx by admin125455
JioEngage_Presentation.pptxJioEngage_Presentation.pptx
JioEngage_Presentation.pptx
admin1254558 views
predicting-m3-devopsconMunich-2023-v2.pptx by Tier1 app
predicting-m3-devopsconMunich-2023-v2.pptxpredicting-m3-devopsconMunich-2023-v2.pptx
predicting-m3-devopsconMunich-2023-v2.pptx
Tier1 app12 views
Quality Engineer: A Day in the Life by John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino7 views
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... by TomHalpin9
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
TomHalpin96 views
Transport Management System - Shipment & Container Tracking by Freightoscope
Transport Management System - Shipment & Container TrackingTransport Management System - Shipment & Container Tracking
Transport Management System - Shipment & Container Tracking
Freightoscope 5 views
Introduction to Git Source Control by John Valentino
Introduction to Git Source ControlIntroduction to Git Source Control
Introduction to Git Source Control
John Valentino7 views
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium... by Lisi Hocke
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...
Lisi Hocke35 views
Top-5-production-devconMunich-2023-v2.pptx by Tier1 app
Top-5-production-devconMunich-2023-v2.pptxTop-5-production-devconMunich-2023-v2.pptx
Top-5-production-devconMunich-2023-v2.pptx
Tier1 app8 views
predicting-m3-devopsconMunich-2023.pptx by Tier1 app
predicting-m3-devopsconMunich-2023.pptxpredicting-m3-devopsconMunich-2023.pptx
predicting-m3-devopsconMunich-2023.pptx
Tier1 app8 views
Bootstrapping vs Venture Capital.pptx by Zeljko Svedic
Bootstrapping vs Venture Capital.pptxBootstrapping vs Venture Capital.pptx
Bootstrapping vs Venture Capital.pptx
Zeljko Svedic15 views
tecnologia18.docx by nosi6702
tecnologia18.docxtecnologia18.docx
tecnologia18.docx
nosi67025 views
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P... by NimaTorabi2
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
NimaTorabi216 views
Navigating container technology for enhanced security by Niklas Saari by Metosin Oy
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas Saari
Metosin Oy15 views
FOSSLight Community Day 2023-11-30 by Shane Coughlan
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30
Shane Coughlan7 views
How to build dyanmic dashboards and ensure they always work by Wiiisdom
How to build dyanmic dashboards and ensure they always workHow to build dyanmic dashboards and ensure they always work
How to build dyanmic dashboards and ensure they always work
Wiiisdom14 views

Debugging Effectively - php[world] 2015

  • 1. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe Debugging Effectively Colin O’Dell
  • 2. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe Colin O’Dell • Lead Web Developer at Unleashed Technologies • PHP developer since 2002 • Certifications: Symfony and Magento • PHP League Member • league/commonmark • league/html-to-markdown • PHP 7 Upgrade Guide e-book • @colinodell / www.colinodell.com
  • 3. 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
  • 4. Debugging is... Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (adjective)
  • 5. Debugging is... Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m important
  • 6. Debugging is... Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m the single most important skill in programming.
  • 7. Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC PlanningCoding
  • 8. Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC Planning Testing & Debugging Coding
  • 9. 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
  • 10. Process is the foundation of effective debugging Process Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
  • 11. Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa Gain experience with tools and code Experience Process
  • 12. Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa Develop a “sixth sense” “Sixth Sense” Experience Process
  • 13. Junior Developers • Try the “usual” steps • Clear the cache • Re-install dependencies • 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
  • 14. XY Problem Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL •I want to solve problem X •How do I solve X?
  • 15. XY Problem Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL •I want to solve problem X •How do I solve X? •Solution Y might work •How can I do Y?
  • 16. Photo by quattrostagioni // cc by 2.0 // https://flic.kr/p/aGjVq8 1.Don’t parse HTML with regex 2.Solve problems the right way
  • 17. “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
  • 18. Bugs are logical Photo by Photofest
  • 19. “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
  • 20. Assume your code is the problem Photo by Sergio Flores Rosales // cc by-nc-nd 2.0 // https://flic.kr/p/5UHkaW
  • 21. 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
  • 22. 1. Gather information • Expected behavior vs. actual behavior • Error messages • Stack traces Photo from youmustdesireit.wordpress.com •Screenshots •Browser & OS •Date & time •Log entries
  • 23. 2. Replicate the Issue Be able to replicate with 100% certainty Photo by Nick Royer // cc by-sa // https://flic.kr/p/d41ASC
  • 24. 3. Identify the Culprit Photo by U.S. Navy // cc 2.0 // https://flic.kr/p/n6Wgks • Be methodical • Make no assumptions • Understand the bug
  • 25. 4. Fix it & Re-test • 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. Tools & Techniques Photo by Alan // cc by-nc-sa 2.0 // https://flic.kr/p/9azLii
  • 30. Two essential tools • Integrated development environment (IDE) • Interactive debugger Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
  • 31. 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
  • 32. 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
  • 34. Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
  • 35. 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
  • 36. 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
  • 37. 1. Trace backwards •Use a debugger •Identify source of error •Establish context •Work backwards a() b() c() d() Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
  • 38. 1. Trace backwards •Use a debugger •Identify source of error •Establish context •Work backwards a() b() c() d() Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
  • 39. 1. Trace backwards •Use a debugger •Identify source of error •Establish context •Work backwards a() b() c() d() Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
  • 40. 1. Trace backwards •Use a debugger •Identify source of error •Establish context •Work backwards a() b() c() d() Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
  • 41. 1. Trace backwards •Use a debugger •Identify source of error •Establish context •Work backwards a() b() c() d() Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
  • 42. 2. Divide & Conquer • Identify different code sections • Set breakpoints at the boundaries • Isolate issue to one particular area • Focus efforts on that area
  • 46. ✓ X
  • 48. 3. Use tools • Automated tests • Kint / VarDumper • Debug toolbars • Console utility • Profilers • git bisect •netcat •curl •etc. Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
  • 49. Automated Tests Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
  • 50. Kint Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe Kint::dump($var);
  • 51. VarDumper Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe Twig: {{ dump(foo) }} {% dump foo %} PHP: dump($somevar);
  • 52. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe Debug toolbars
  • 53. Console Utility Symfony: app/console Drupal: drush Magento: n98-magerun.phar Laravel: artisan Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
  • 54. 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)
  • 55. Blackfire Photo by Alan Stark // cc by-sa 2.0 // https://flic.kr/p/dn3qjx
  • 56. New Relic Photo by Alan Stark // cc by-sa 2.0 // https://flic.kr/p/dn3qjx
  • 57. git bisect v1.7 ? ? ? ? ? ? ? HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm git bisect start git bisect bad
  • 58. git bisect v1.7 ? ? ? ? ? ? ? HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm git bisect good
  • 59. git bisect v1.7 ? ? ? ? ? ? ? HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm git bisect bad
  • 60. git bisect v1.7 ? ? ? BAD ? ? ? HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm git bisect bad
  • 61. git bisect v1.7 ? ? ? BAD BAD BAD BAD HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm git bisect good
  • 62. git bisect v1.7 ? GOOD ? BAD BAD BAD BAD HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm git bisect good
  • 63. git bisect v1.7 GOOD GOOD ? BAD BAD BAD BAD HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
  • 64. git bisect v1.7 GOOD GOOD X BAD BAD BAD BAD HEAD Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm abcd123 is the first bad commit
  • 65. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe netcat
  • 66. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe curl
  • 67. 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
  • 68. 5. Take a break Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/cFEcDC • Clear your mind; start fresh • Forget invalid assumptions • Recharge your batteries • Let your subconscious work on it
  • 69. 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 or take things for granted Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/dvEpfY
  • 70. Questions? Photo by Marcello Maria Perongini // cc by-nc-nd 2.0 // https://flic.kr/p/6KDtm
  • 71. 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://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
  • 72. Thanks! Feedback? • https://joind.in/14752 •@colinodell Photo by Steve Rotman // cc by-nc-nd 2.0 // https://flic.kr/p/xiBK

Editor's Notes

  1. PHP developer 13 years JS, Java, C#
  2. What are some words For me: fun challenge
  3. Take this one step further Why is that?
  4. How much time coding? 2/3rds
  5. According to the Mythical Man Month, 1/6th ½ is testing/debugging How much - actually writing code vs getting it working Area where it’s worthwhile to become efficient
  6. READ SLOWLY Shouldn’t be done haphazardly
  7. Immediate understanding of what type of problem, where it might be Like intuition, but not Understanding without proof, but based on logic and experience -- Focus on the process Experience and “sixth sense” will come with time NEXT: Debugging process
  8. And intermediate developers BE NICE / CONSTRUCTIVE
  9. TODO ADD NOTES
  10. When you give up on the proper approach Apply workaround instead Improper solutions will cause issues later NEXT - EXAMPLE
  11. First Magento client Ability to generate PDFs Base85-encoded Don’t be clever TRANSITION NEEDED!!
  12. Magical thinking Code is not a magic black box
  13. Article sneaky
  14. Bugs are almost always based on faulty assumptions If you build on faulty assumptions 95% in your code If helping others, assume their code is problem Challenge their assumptions Take with grain of salt
  15. Define the symptoms Collect everything you can
  16. Automated tests preferred, but manual is okay too LEGOS
  17. Understand the fundamental nature Exactly why We’ll get into the tools & techniques
  18. Other nice-to-haves: File syncing Git integration Run tools PhpStorm, Sublime Text, vim NOT Notepad++ or Dreamweaver
  19. Debuggers are awesome tool … Better than primitive approaches Examine in real time Xdebug Chrome developer tools
  20. Click 4 times Dive in Look at call stack
  21. Advanced breakpoints ============== Conditions Grouping
  22. Stack trace Grep for error message Set breakpoint For example
  23. Examine variables How did I get here? – call stack
  24. Debugger is critical Not only tool Tools are not a substitute for thinking
  25. Phpunit Phpspec behat
  26. Drop-in replacement for var_dump(), print_r() and debug_backtrace().
  27. Symfony VarDumper component Works in Twig, PHP, CLI, etc. Better than vardump Handles: - Circular references - Deeply-nested objects Public vs protected vs private Custom casters to change representation
  28. Q: How many people here are using Git? Familiar with Git bisect? Built-in tool Assists with running a binary search across your commits
  29. Scales logarithmically – runs in O(log N) 9 commits - 4 tests 10x: 90 commits – 8 tests 100x: 900 commits - 16 tests
  30. Fourth technique
  31. 1. There is ALWAYS a logical explanation 3. Great learning opportunity 4. Challenge everything
  32. ? Other Questions? Talk afterwards or contact me
  33. Thank you guys I’d appreciate feedback