Debugging Effectively
-
Upload
colin-odell -
Category
Software
-
view
410 -
download
0
Transcript of Debugging Effectively
![Page 1: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/1.jpg)
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Debugging EffectivelyColin O’Dell
@colinodell
![Page 2: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/2.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/4.jpg)
Debugging is...
Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (adjective)
![Page 5: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/5.jpg)
Debugging is...
important
Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m
![Page 6: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/6.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/7.jpg)
PlanningCoding
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
![Page 8: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/8.jpg)
Planning
Testing & Debugging
Coding
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
![Page 9: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/9.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/11.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/12.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/13.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/14.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/15.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/16.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/17.jpg)
“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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/18.jpg)
Bugs arelogical
Photo by Photofest
![Page 19: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/19.jpg)
“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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/22.jpg)
• 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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/23.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/24.jpg)
• 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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/25.jpg)
• 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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/26.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/27.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/28.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/29.jpg)
Tools &Techniques
Photo by Alan // cc by-nc-sa 2.0 // https://flic.kr/p/9azLii
![Page 30: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/30.jpg)
Two essential tools
• Integrated developmentenvironment (IDE)
• Interactive debugger
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
![Page 31: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/31.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/32.jpg)
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 33: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/33.jpg)
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
![Page 34: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/34.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/35.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/36.jpg)
1. Trace backwardsa()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
![Page 37: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/37.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/38.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/39.jpg)
![Page 40: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/40.jpg)
![Page 41: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/41.jpg)
![Page 42: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/42.jpg)
✓
X
![Page 43: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/43.jpg)
![Page 44: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/44.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/45.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/46.jpg)
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Debug toolbars
![Page 47: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/47.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/48.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/49.jpg)
git bisect
v1.7 ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
![Page 50: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/50.jpg)
git bisect
v1.7 ? ? BAD ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
![Page 51: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/51.jpg)
git bisect
v1.7 ? ? BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
![Page 52: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/52.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/53.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/54.jpg)
netcat
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
![Page 55: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/55.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/56.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/57.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/58.jpg)
Questions?
Photo by Marcello Maria Perongini // cc by-nc-nd 2.0 // https://flic.kr/p/6KDtm
![Page 59: Debugging Effectively](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/59.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/60.jpg)
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](https://reader030.fdocuments.net/reader030/viewer/2022021421/58f0ab7f1a28abc02c8b456f/html5/thumbnails/61.jpg)