Debugging in PHP can be tedious and prone to error when using var_dump and echo statements. Learn how to debug more effectively and get better insight into an application by using Xdebug. See how to setup PHPStorm, Xdebug, and the browser to enable debugging that will let you step into code and see variable values live. Extend those debugging capabilities into REST and SOAP clients to increase the code that can be debugged with ease.
Machine Learning Software Engineering Patterns and Their Engineering
Debugging PHP With Xdebug
1. D E B U G G I N G P H P W I T H
X D E B U G
M A R K N I E B E R G A L L
https://joind.in/talk/14128
2. A B O U T M A R K N I E B E R G A L L
• PHP since 2005
• Masters degree in MIS
• Senior Software Engineer
• Team Lead
• Drug screening project
• President of Utah PHP User Group (UPHPU)
• SSCP, CSSLP Certified and SME for (ISC)2
• PHP, databases, JavaScript
• Drones, fishing, skiing, father, husband
4. D E B U G G I N G P H P W I T H X D E B U G
UPHPU
• Third Thursday of each month at 7pm
• Venue is Vivint in Lehi (3401 Ashton Blvd)
• Variety of PHP related topics
• Mostly local speakers, occasional traveling speaker
• Networking with other developers, companies
• Professional development
• uphpu.org
9. W H AT I S X D E B U G
Xdebug
• Available since 2002
• Developed initially by Derick Rethans
• PHP extension
• Written in C
• Open source
• Used for debugging and profiling
• Uses DeBugGer Protocol (DBGp) for communication
11. W H Y U S E X D E B U G
Debugging without Xdebug
12. W H Y U S E X D E B U G
Debugging without Xdebug
• echo $something;
• var_dump($other);
• print_r($data);
• error_log(__FILE__ . ‘ line ‘ . __LINE__);
13. W H Y U S E X D E B U G
Debugging without Xdebug
• Add outputs
• Load page
• Look for output
• Change some code
• Add more outputs
• Repeat
• Cleanup outputs without missing any
• Load page
15. W H Y U S E X D E B U G
Debugging with Xdebug
• Add breakpoint(s)
• Load page
• Step into the code
16. W H Y U S E X D E B U G
Debugging with Xdebug
• Live values
• Follow actual code path
• Full stacktrace
17. W H Y U S E X D E B U G
Debugging with Xdebug
• Supported by most IDEs
• Faster development time
• Better understanding of what code is actually doing
• Does not require code changes to interrogate values
19. S E T T I N G U P X D E B U G
Fire up you development environment
20. S E T T I N G U P X D E B U G
Documentation from JetBrain for PhpStorm
https://confluence.jetbrains.com/display/PhpStorm/Zero-configuration+Web
+Application+Debugging+with+Xdebug+and+PhpStorm
1. Install Xdebug
2. Prepare PhpStorm
3. Set a breakpoint in the source code
4. Activate debugger on server
5. Start a debug session in browser
6. Reload the current page
7. Set initial path mappings
21. S E T T I N G U P X D E B U G
1. Install Xdebug
22. S E T T I N G U P X D E B U G
1. Install Xdebug
• https://xdebug.org/docs/install
23. S E T T I N G U P X D E B U G
1. Install Xdebug
• Download (if applicable)
• Install or compile
• Configure PHP
• Restart webserver
24. S E T T I N G U P X D E B U G
1. Install Xdebug
• Windows:
- Xdebug website has a wizard, dll downloads
• Mac:
- sudo pecl install xdebug
- brew install php70-xdebug
• Linux:
- wget http://xdebug.org/files/xdebug-2.4.0.tgz
- sudo pecl install xdebug
25. S E T T I N G U P X D E B U G
1. Install Xdebug
• Windows: download dll
- Xdebug website has a wizard, downloads
- Paste php -i or phpinfo() (ex: C:phpphp -i > C:
phpphpinfo.txt or <?php phpinfo();)
- dll download link provided
- Add a line to your php.ini file
- Restart webserver
26. S E T T I N G U P X D E B U G
1. Install Xdebug
• apt-get install php5-xdebug
• wget http://xdebug.org/files/xdebug-2.4.0.tgz
tar -xzvf xdebug-2.4.0.tgz
cd xdebug-2.4.0
phpize
./configure --enable-xdebug
make
make install
27. S E T T I N G U P X D E B U G
1. Install Xdebug
• yum install php-devel
yum install php-pear
pecl install xdebug
• dnf install php-devel
dnf install php-pear
pecl install xdebug
28. S E T T I N G U P X D E B U G
1. Install Xdebug
• Update php.ini by adding lines:
zend_extension = php_xdebug-2.4.0-5.5-vc11.dll
[xdebug]
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_host = localhost
xdebug.idekey = PHPSTORM
29. S E T T I N G U P X D E B U G
1. Install Xdebug
• Update php.ini by adding lines:
zend_extension = /usr/lib64/php/modules/xdebug.so
[xdebug]
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_host = localhost
xdebug.idekey = PHPSTORM
30. S E T T I N G U P X D E B U G
1. Install Xdebug
• Restart webserver
- Windows:
Services
Apache Monitor
- Linux:
sudo apachectl restart
sudo service nginx restart
31. S E T T I N G U P X D E B U G
1. Install Xdebug
• Verify via phpinfo
- <?php phpinfo();
- php -i | grep xdebug
32. S E T T I N G U P X D E B U G
1. Install Xdebug
• Verify via phpinfo
33. S E T T I N G U P X D E B U G
2. Prepare PhpStorm
34. S E T T I N G U P X D E B U G
2. Prepare PhpStorm
• Start Listening for PHP Debug Connections
35. S E T T I N G U P X D E B U G
2. Prepare PhpStorm
36. S E T T I N G U P X D E B U G
2. Prepare PhpStorm
37. S E T T I N G U P X D E B U G
2. Prepare PhpStorm
• Setup debug settings
38.
39. S E T T I N G U P X D E B U G
2. Prepare PhpStorm
• Setup project path mapping
40. S E T T I N G U P X D E B U G
2. Prepare PhpStorm
41. S E T T I N G U P X D E B U G
3. Set a breakpoint in the source code
42. S E T T I N G U P X D E B U G
3. Set a breakpoint in the source code
• Line you know will be hit
• Or break on first line
43.
44. S E T T I N G U P X D E B U G
4. Activate debugger on server
45. S E T T I N G U P X D E B U G
4. Activate debugger on server
• Browser plugin, add-on
- The easiest Xdebug (Firefox)
- Xdebug Helper (Chrome)
- Xdebug Toggler (Safari)
- Xdebug launcher (Opera)
46. S E T T I N G U P X D E B U G
4. Activate debugger on server
47. S E T T I N G U P X D E B U G
4. Activate debugger on server
48. S E T T I N G U P X D E B U G
4. Activate debugger on server
• URL
- GET: &XDEBUG_SESSION_START=PHPSTORM
- POST: XDEBUG_SESSION_START=PHPSTORM
• Headers
- Name: Cookie
- Value: XDEBUG_SESSION=PHPSTORM
• Bookmarklet
49. S E T T I N G U P X D E B U G
4. Activate debugger on server
50. S E T T I N G U P X D E B U G
4. Activate debugger on server
51. S E T T I N G U P X D E B U G
4. Activate debugger on server
52. S E T T I N G U P X D E B U G
4. Activate debugger on server
53. S E T T I N G U P X D E B U G
4. Activate debugger on server
54. S E T T I N G U P X D E B U G
4. Activate debugger on server
55. S E T T I N G U P X D E B U G
4. Activate debugger on server
56. S E T T I N G U P X D E B U G
5. Start a debug session in browser
57. S E T T I N G U P X D E B U G
5. Start a debug session in browser
• Click the debug button in toolbar
• Add GET, POST, or COOKIE
58. S E T T I N G U P X D E B U G
6. Reload the current page
59. S E T T I N G U P X D E B U G
6. Reload the current page
60. S E T T I N G U P X D E B U G
7. Set initial path mappings
61. S E T T I N G U P X D E B U G
7. Set initial path mappings
66. U S I N G X D E B U G
Breakpoints
• Pause code execution at specific line
• Allowed multiple breakpoints
• Conditional breakpoints
67. U S I N G X D E B U G
Breakpoints
• Place strategically
• Not too early
• Not too late
• Not too many
• Remember time limit, increase if needed
• Use conditional breakpoints in loops
71. U S I N G X D E B U G
Stepping through code
• Resume Program (Play)
• Stop
• View Breakpoints
• Disable All Breakpoints
72. U S I N G X D E B U G
Stepping through code
• Step Over
• Step Into
• Force Step Into
• Step Out
• Run to Cursor
73. U S I N G X D E B U G
Stepping through code
• Evaluate Expression
• Show value addresses
• Hide empty superglobal variables (on by default)
• Add method to skip list
79. S U M M A RY
• More efficient way to debug
• Visibility into code
• Ability to change code on the fly
• Watch values change line by line
• Better understanding of code path
80. Q U E S T I O N S ?
https://joind.in/talk/14128
81. S O U R C E S
• JetBrains documentation https://confluence.jetbrains.com/display/PhpStorm/Zero-
configuration+Web+Application+Debugging+with+Xdebug+and+PhpStorm
• Xdebug documentation https://xdebug.org/docs/install
• David Stockton, php[architect], January 2015, https://www.phparch.com/wp-
content/uploads/2015/01/levelup-xdebug-phparchitect-jan2015.pdf