SlideShare a Scribd company logo
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

More Related Content

PPTX
Debugging Effectively - SymfonyLive San Francisco 2015
PPTX
Debugging Effectively - PHP UK 2017
PPTX
Debugging Effectively - ZendCon 2016
PPTX
Debugging Effectively - SunshinePHP 2017
PPTX
Debugging Effectively
PPTX
Debugging Effectively - Frederick Web Tech 9/6/16
PPTX
Debugging Effectively - All Things Open 2017
PPTX
Debugging Effectively - ConFoo Montreal 2019
Debugging Effectively - SymfonyLive San Francisco 2015
Debugging Effectively - PHP UK 2017
Debugging Effectively - ZendCon 2016
Debugging Effectively - SunshinePHP 2017
Debugging Effectively
Debugging Effectively - Frederick Web Tech 9/6/16
Debugging Effectively - All Things Open 2017
Debugging Effectively - ConFoo Montreal 2019

What's hot (6)

PPTX
Debugging Effectively - DrupalCon Europe 2016
PPTX
Debugging Effectively - DrupalCon Nashville 2018
PDF
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"
PPTX
Automate ALL THE THINGS
PDF
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
PPTX
2012 ASTD TechKnowledge – Tim Martin
Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Nashville 2018
JCON 2021 talk - "Wil Git Be Around Forever? A List of Possible Successors"
Automate ALL THE THINGS
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
2012 ASTD TechKnowledge – Tim Martin
Ad

Viewers also liked (17)

PDF
Behat c'est plus que ça | Behat is more than that
PDF
The Commando Devops
PDF
Pasos a seguir
DOCX
Influencia de la gestión del cambio social en la dinámica de grupos
PPTX
PHP, ce truc de vieux
PPTX
Patchwork UTF-8 : portabilité unicode et graphèmes clusters
ODP
HTML5 mobile avec Sencha Touch [FR]
PDF
Webperformance #rouendayvous
PDF
jQuery sans jQuery
PDF
Breizhcamp 2014 : Une partie de Cache-Cache
PDF
PHP Tour 2012 - Conférence FuelPHP
PDF
Falling in Love with Forms [Microsoft Edge Web Summit 2015]
KEY
Elasticsearch - OSDC France 2012
PDF
Le Profiling d'applications PHP - Blackfire.io
PDF
Maitriser les structures de données PHP 102 - Forum Paris 2012
PDF
The Real Cost of Slow Time vs Downtime
PDF
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Behat c'est plus que ça | Behat is more than that
The Commando Devops
Pasos a seguir
Influencia de la gestión del cambio social en la dinámica de grupos
PHP, ce truc de vieux
Patchwork UTF-8 : portabilité unicode et graphèmes clusters
HTML5 mobile avec Sencha Touch [FR]
Webperformance #rouendayvous
jQuery sans jQuery
Breizhcamp 2014 : Une partie de Cache-Cache
PHP Tour 2012 - Conférence FuelPHP
Falling in Love with Forms [Microsoft Edge Web Summit 2015]
Elasticsearch - OSDC France 2012
Le Profiling d'applications PHP - Blackfire.io
Maitriser les structures de données PHP 102 - Forum Paris 2012
The Real Cost of Slow Time vs Downtime
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Ad

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

PDF
Let the contribution begin
PDF
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트
PDF
Let the contribution begin (EST futures)
PPT
Mom was wrong: Do talk to strangers
PDF
The Seven Wastes of Software Development
PPTX
Workshop-Build e deploy avançado com Openshift e Kubernetes
PDF
Git Basics Workshop Summer of Tech 2010
PDF
Making the Web Fireproof: A Building Code for Websites
PDF
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
PDF
BlackBerry 10 Core Native Camera API
PDF
Digital Fabrication Studio: 3D Scanning
PDF
Seaside Portability
PPTX
Saving our social_media
PDF
DevOps for Opensource Geospatial Applications
PDF
We Learn Through Stories at PRIZMAH17
PPT
02_Agile_Planning_and_Requirements_1.ppt
PDF
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
PPTX
Android build on windows
PPTX
Photogram - English Manual
PDF
Virtual Machines & Volunteer Computing
Let the contribution begin
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트
Let the contribution begin (EST futures)
Mom was wrong: Do talk to strangers
The Seven Wastes of Software Development
Workshop-Build e deploy avançado com Openshift e Kubernetes
Git Basics Workshop Summer of Tech 2010
Making the Web Fireproof: A Building Code for Websites
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
BlackBerry 10 Core Native Camera API
Digital Fabrication Studio: 3D Scanning
Seaside Portability
Saving our social_media
DevOps for Opensource Geospatial Applications
We Learn Through Stories at PRIZMAH17
02_Agile_Planning_and_Requirements_1.ppt
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Android build on windows
Photogram - English Manual
Virtual Machines & Volunteer Computing

More from Colin O'Dell (20)

PPTX
Demystifying Unicode - Longhorn PHP 2021
PPTX
Releasing High Quality Packages - Longhorn PHP 2021
PPTX
Releasing High Quality PHP Packages - ConFoo Montreal 2019
PPTX
Automating Deployments with Deployer - php[world] 2018
PPTX
Releasing High-Quality Packages - php[world] 2018
PPTX
CommonMark: Markdown Done Right - ZendCon 2017
PDF
Rise of the Machines: PHP and IoT - ZendCon 2017
PPTX
Hacking Your Way To Better Security - DrupalCon Baltimore 2017
PPTX
Automating Your Workflow with Gulp.js - php[world] 2016
PPTX
Rise of the Machines: PHP and IoT - php[world] 2016
PPTX
Hacking Your Way to Better Security - ZendCon 2016
PPTX
Hacking Your Way to Better Security - PHP South Africa 2016
PPTX
CommonMark: Markdown done right - Nomad PHP September 2016
PPTX
Hacking Your Way To Better Security - Dutch PHP Conference 2016
PDF
Hacking Your Way To Better Security - php[tek] 2016
PDF
CommonMark: Markdown Done Right
PPTX
PHP 7 Crash Course
PDF
Hacking Your Way To Better Security
PPTX
Introduction to league/commonmark
PPTX
PHP 7 Crash Course - php[world] 2015
Demystifying Unicode - Longhorn PHP 2021
Releasing High Quality Packages - Longhorn PHP 2021
Releasing High Quality PHP Packages - ConFoo Montreal 2019
Automating Deployments with Deployer - php[world] 2018
Releasing High-Quality Packages - php[world] 2018
CommonMark: Markdown Done Right - ZendCon 2017
Rise of the Machines: PHP and IoT - ZendCon 2017
Hacking Your Way To Better Security - DrupalCon Baltimore 2017
Automating Your Workflow with Gulp.js - php[world] 2016
Rise of the Machines: PHP and IoT - php[world] 2016
Hacking Your Way to Better Security - ZendCon 2016
Hacking Your Way to Better Security - PHP South Africa 2016
CommonMark: Markdown done right - Nomad PHP September 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - php[tek] 2016
CommonMark: Markdown Done Right
PHP 7 Crash Course
Hacking Your Way To Better Security
Introduction to league/commonmark
PHP 7 Crash Course - php[world] 2015

Recently uploaded (20)

PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
medical staffing services at VALiNTRY
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PPTX
Odoo POS Development Services by CandidRoot Solutions
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PPTX
Why Generative AI is the Future of Content, Code & Creativity?
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Digital Strategies for Manufacturing Companies
PPTX
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
PDF
Understanding Forklifts - TECH EHS Solution
PDF
top salesforce developer skills in 2025.pdf
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Cost to Outsource Software Development in 2025
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
Design an Analysis of Algorithms II-SECS-1021-03
medical staffing services at VALiNTRY
Upgrade and Innovation Strategies for SAP ERP Customers
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Odoo POS Development Services by CandidRoot Solutions
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Computer Software and OS of computer science of grade 11.pptx
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Why Generative AI is the Future of Content, Code & Creativity?
CHAPTER 2 - PM Management and IT Context
Digital Strategies for Manufacturing Companies
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
Understanding Forklifts - TECH EHS Solution
top salesforce developer skills in 2025.pdf
Odoo Companies in India – Driving Business Transformation.pdf
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Wondershare Filmora 15 Crack With Activation Key [2025
Cost to Outsource Software Development in 2025
How to Choose the Right IT Partner for Your Business in Malaysia

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

  • #3: PHP developer 13 years JS, Java, C#
  • #5: What are some words For me: fun challenge
  • #7: Take this one step further Why is that?
  • #8: How much time coding? 2/3rds
  • #9: 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
  • #10: READ SLOWLY Shouldn’t be done haphazardly
  • #13: 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
  • #14: And intermediate developers BE NICE / CONSTRUCTIVE
  • #15: TODO ADD NOTES
  • #16: When you give up on the proper approach Apply workaround instead Improper solutions will cause issues later NEXT - EXAMPLE
  • #17: First Magento client Ability to generate PDFs Base85-encoded Don’t be clever TRANSITION NEEDED!!
  • #18: Magical thinking Code is not a magic black box
  • #20: Article sneaky
  • #21: 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
  • #23: Define the symptoms Collect everything you can
  • #24: Automated tests preferred, but manual is okay too LEGOS
  • #25: Understand the fundamental nature Exactly why We’ll get into the tools & techniques
  • #32: Other nice-to-haves: File syncing Git integration Run tools PhpStorm, Sublime Text, vim NOT Notepad++ or Dreamweaver
  • #33: Debuggers are awesome tool … Better than primitive approaches Examine in real time Xdebug Chrome developer tools
  • #34: Click 4 times Dive in Look at call stack
  • #35: Advanced breakpoints ============== Conditions Grouping
  • #37: Stack trace Grep for error message Set breakpoint For example
  • #38: Examine variables How did I get here? – call stack
  • #49: Debugger is critical Not only tool Tools are not a substitute for thinking
  • #50: Phpunit Phpspec behat
  • #51: Drop-in replacement for var_dump(), print_r() and debug_backtrace().
  • #52: 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
  • #58: Q: How many people here are using Git? Familiar with Git bisect? Built-in tool Assists with running a binary search across your commits
  • #65: Scales logarithmically – runs in O(log N) 9 commits - 4 tests 10x: 90 commits – 8 tests 100x: 900 commits - 16 tests
  • #68: Fourth technique
  • #70: 1. There is ALWAYS a logical explanation 3. Great learning opportunity 4. Challenge everything
  • #71: ? Other Questions? Talk afterwards or contact me
  • #73: Thank you guys I’d appreciate feedback