SlideShare a Scribd company logo
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/50bee
Debugging PHP with Xdebug - PHPUK 2018
D E B U G G I N G P H P W I T H
X D E B U G
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
• Drug screening project
• UPHPU President
• CSSLP, SSCP Certified and SME
• Drones, fishing, skiing, father, husband
A B O U T M A R K N I E B E R G A L L
• Manchester
• Nelson
• Workington
A B O U T M A R K N I E B E R G A L L
A B O U T M A R K N I E B E R G A L L
D E B U G G I N G P H P W I T H X D E B U G
Overview
• What is Xdebug
• Why use Xdebug
• Setting up Xdebug
• Using Xdebug
W H AT I S X D E B U G
W H AT I S X D E B U G
W H AT I S X D E B U G
Xdebug
• Step-into debugger
• Profiler
• DeBugGer Protocol (DBGp) for communication
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
W H Y U S E X D E B U G
W H Y U S E X D E B U G
Debugging without Xdebug
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__);
W H Y U S E X D E B U G
Debugging without Xdebug
1. Add outputs
2. Load page
3. Look for output
4. Change some code
5. Add more outputs
6. Repeat
7. Cleanup outputs without missing any
8. Load page
W H Y U S E X D E B U G
Debugging with Xdebug
W H Y U S E X D E B U G
Debugging with Xdebug
1. Turn on debugging
2. Add breakpoint(s)
3. Load page
4. Step into the code
W H Y U S E X D E B U G
Debugging with Xdebug
• Live values
• Follow actual code path
• Full stacktrace
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
S E T T I N G U P X D E B U G
S E T T I N G U P X D E B U G
Fire up you development environment
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
S E T T I N G U P X D E B U G
1. Install Xdebug
S E T T I N G U P X D E B U G
1. Install Xdebug
• https://xdebug.org/docs/install
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
S E T T I N G U P X D E B U G
1. Install Xdebug
• git clone https://github.com/xdebug/xdebug.git
• cd xdebug
• ./rebuild.sh
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 php72-xdebug
• Linux:
- wget http://xdebug.org/files/xdebug-2.6.0.tgz
- sudo pecl install xdebug
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
S E T T I N G U P X D E B U G
1. Install Xdebug
• apt-get install php-xdebug
• wget http://xdebug.org/files/xdebug-2.6.0.tgz

tar -xzvf xdebug-2.6.0.tgz

cd xdebug-2.6.0

phpize

./configure --enable-xdebug

make

make install
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
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.6.0-7.2-vc15-nts-x86_64.dll



[xdebug]

xdebug.remote_enable = 1

xdebug.remote_autostart = 1

xdebug.remote_port = 9000

xdebug.remote_host = localhost

xdebug.idekey = PHPSTORM

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_autostart = 1

xdebug.remote_port = 9000

xdebug.remote_host = localhost

xdebug.idekey = PHPSTORM

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
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
S E T T I N G U P X D E B U G
1. Install Xdebug
• Verify via phpinfo
S E T T I N G U P X D E B U G
1. Install Xdebug
• Verify via phpinfo
S E T T I N G U P X D E B U G
2. Prepare PhpStorm
S E T T I N G U P X D E B U G
2. Prepare PhpStorm
• Start Listening for PHP Debug Connections
S E T T I N G U P X D E B U G
2. Prepare PhpStorm
S E T T I N G U P X D E B U G
2. Prepare PhpStorm
S E T T I N G U P X D E B U G
2. Prepare PhpStorm
• Setup debug settings
Debugging PHP with Xdebug - PHPUK 2018
S E T T I N G U P X D E B U G
2. Prepare PhpStorm
• Setup project path mapping
S E T T I N G U P X D E B U G
2. Prepare PhpStorm
S E T T I N G U P X D E B U G
3. Set a breakpoint in the source code
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
Debugging PHP with Xdebug - PHPUK 2018
S E T T I N G U P X D E B U G
4. Activate debugger on server
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)
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
4. Activate debugger on server
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
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
4. Activate debugger on server
S E T T I N G U P X D E B U G
5. Start a debug session in browser
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
S E T T I N G U P X D E B U G
6. Reload the current page
S E T T I N G U P X D E B U G
6. Reload the current page
S E T T I N G U P X D E B U G
7. Set initial path mappings
S E T T I N G U P X D E B U G
7. Set initial path mappings
U S I N G X D E B U G
U S I N G X D E B U G
U S I N G X D E B U G
• Breakpoints
• Stepping through code
• Watches
• Console
U S I N G X D E B U G
U S I N G X D E B U G
Breakpoints
• Pause code execution at specific line
• Allowed multiple breakpoints
• Conditional breakpoints
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
U S I N G X D E B U G
Breakpoints
U S I N G X D E B U G
Breakpoints
U S I N G X D E B U G
Stepping through code
U S I N G X D E B U G
Stepping through code
• Resume Program (Play)
• Stop
• View Breakpoints
• Disable All Breakpoints
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
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
U S I N G X D E B U G
Watches
U S I N G X D E B U G
Watches
• Live updates
• Values
• Expressions
U S I N G X D E B U G
Console
U S I N G X D E B U G
Console
• Output from debugging expressions
• Enter expressions to be evaluated
S U M M A RY
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
D I S C U S S I O N
• Setup issues
• Remote debugging
• Profiling
• Xdebug vs alternative methods
Q U E S T I O N S ?
https://joind.in/talk/50bee
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
• https://sievertschreiber.files.wordpress.com/2010/04/crane-truck-double-fail.jpg
Ad

Recommended

Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Mark Niebergall
 
Stacking Up Middleware
Stacking Up Middleware
Mark Niebergall
 
Php 7 hhvm and co
Php 7 hhvm and co
Pierre Joye
 
Php7 hhvm and co
Php7 hhvm and co
Pierre Joye
 
Debugging concurrency programs in go
Debugging concurrency programs in go
Andrii Soldatenko
 
The why and how of moving to php 5.4
The why and how of moving to php 5.4
Wim Godden
 
What you need to remember when you upload to CPAN
What you need to remember when you upload to CPAN
charsbar
 
PHP 7.1 : elegance of our legacy
PHP 7.1 : elegance of our legacy
Damien Seguy
 
Preparing code for Php 7 workshop
Preparing code for Php 7 workshop
Damien Seguy
 
Puppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLab
Alessandro Franceschi
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environments
Andrii Soldatenko
 
Effective Benchmarks
Effective Benchmarks
Workhorse Computing
 
Nginx pres
Nginx pres
James Fuller
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
How to inspect a RUNNING perl process
How to inspect a RUNNING perl process
Masaaki HIROSE
 
Unit Testing Lots of Perl
Unit Testing Lots of Perl
Workhorse Computing
 
Diving into HHVM Extensions (PHPNW Conference 2015)
Diving into HHVM Extensions (PHPNW Conference 2015)
James Titcumb
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnit
James Fuller
 
Getting Testy With Perl6
Getting Testy With Perl6
Workhorse Computing
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
Wim Godden
 
How to deploy node to production
How to deploy node to production
Sean Hess
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
Get your teeth into Plack
Get your teeth into Plack
Workhorse Computing
 
The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5
Wim Godden
 
Smoking docker
Smoking docker
Workhorse Computing
 
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
Ontico
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2
LiviaLiaoFontech
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshop
Nick Belhomme
 
Debugging PHP With Xdebug
Debugging PHP With Xdebug
Mark Niebergall
 
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Bastian Feder
 

More Related Content

What's hot (20)

Preparing code for Php 7 workshop
Preparing code for Php 7 workshop
Damien Seguy
 
Puppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLab
Alessandro Franceschi
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environments
Andrii Soldatenko
 
Effective Benchmarks
Effective Benchmarks
Workhorse Computing
 
Nginx pres
Nginx pres
James Fuller
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
How to inspect a RUNNING perl process
How to inspect a RUNNING perl process
Masaaki HIROSE
 
Unit Testing Lots of Perl
Unit Testing Lots of Perl
Workhorse Computing
 
Diving into HHVM Extensions (PHPNW Conference 2015)
Diving into HHVM Extensions (PHPNW Conference 2015)
James Titcumb
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnit
James Fuller
 
Getting Testy With Perl6
Getting Testy With Perl6
Workhorse Computing
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
Wim Godden
 
How to deploy node to production
How to deploy node to production
Sean Hess
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
Get your teeth into Plack
Get your teeth into Plack
Workhorse Computing
 
The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5
Wim Godden
 
Smoking docker
Smoking docker
Workhorse Computing
 
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
Ontico
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2
LiviaLiaoFontech
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshop
Nick Belhomme
 
Preparing code for Php 7 workshop
Preparing code for Php 7 workshop
Damien Seguy
 
Puppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLab
Alessandro Franceschi
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environments
Andrii Soldatenko
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
How to inspect a RUNNING perl process
How to inspect a RUNNING perl process
Masaaki HIROSE
 
Diving into HHVM Extensions (PHPNW Conference 2015)
Diving into HHVM Extensions (PHPNW Conference 2015)
James Titcumb
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnit
James Fuller
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
Wim Godden
 
How to deploy node to production
How to deploy node to production
Sean Hess
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5
Wim Godden
 
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
Ontico
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2
LiviaLiaoFontech
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshop
Nick Belhomme
 

Similar to Debugging PHP with Xdebug - PHPUK 2018 (20)

Debugging PHP With Xdebug
Debugging PHP With Xdebug
Mark Niebergall
 
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Bastian Feder
 
Getting Started With Xdebug
Getting Started With Xdebug
Jeremy Ward
 
Xdebug for Beginners
Xdebug for Beginners
Sean Prunka
 
Xdebug
Xdebug
Bryce Embry
 
Xdebug from a to x
Xdebug from a to x
Gennady Feldman
 
DDD (Debugger Driven Development)
DDD (Debugger Driven Development)
Carlos Granados
 
Introduction to Xdebug
Introduction to Xdebug
Abid Malik
 
Xdebug
Xdebug
Tobias Schlitt
 
Xdebug - Your first, last, and best option for troubleshooting PHP code
Xdebug - Your first, last, and best option for troubleshooting PHP code
Adam Englander
 
Xdebug - Derick Rethans - Barcelona PHP Conference 2008
Xdebug - Derick Rethans - Barcelona PHP Conference 2008
phpbarcelona
 
Debugging WordPress with xDebug
Debugging WordPress with xDebug
WordCamp Sydney
 
X-Debug in Php Storm
X-Debug in Php Storm
KLabCyscorpions-TechBlog
 
Xdebug
Xdebug
Tobias Schlitt
 
Debugging with Zend Studio for Eclipse
Debugging with Zend Studio for Eclipse
OSSCube
 
Xdebug and Drupal8 tests (PhpUnit and Simpletest)
Xdebug and Drupal8 tests (PhpUnit and Simpletest)
Francisco José Seva Mora
 
Php Debugger
Php Debugger
guest8cd374
 
XDebug For php debugging
XDebug For php debugging
Omid Khosrojerdi
 
Drupal Development w/ PhpStorm and Xdebug
Drupal Development w/ PhpStorm and Xdebug
Chris Haynes
 
Debugging: Rules & Tools
Debugging: Rules & Tools
Ian Barber
 
Debugging PHP With Xdebug
Debugging PHP With Xdebug
Mark Niebergall
 
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Bastian Feder
 
Getting Started With Xdebug
Getting Started With Xdebug
Jeremy Ward
 
Xdebug for Beginners
Xdebug for Beginners
Sean Prunka
 
DDD (Debugger Driven Development)
DDD (Debugger Driven Development)
Carlos Granados
 
Introduction to Xdebug
Introduction to Xdebug
Abid Malik
 
Xdebug - Your first, last, and best option for troubleshooting PHP code
Xdebug - Your first, last, and best option for troubleshooting PHP code
Adam Englander
 
Xdebug - Derick Rethans - Barcelona PHP Conference 2008
Xdebug - Derick Rethans - Barcelona PHP Conference 2008
phpbarcelona
 
Debugging WordPress with xDebug
Debugging WordPress with xDebug
WordCamp Sydney
 
Debugging with Zend Studio for Eclipse
Debugging with Zend Studio for Eclipse
OSSCube
 
Xdebug and Drupal8 tests (PhpUnit and Simpletest)
Xdebug and Drupal8 tests (PhpUnit and Simpletest)
Francisco José Seva Mora
 
Drupal Development w/ PhpStorm and Xdebug
Drupal Development w/ PhpStorm and Xdebug
Chris Haynes
 
Debugging: Rules & Tools
Debugging: Rules & Tools
Ian Barber
 
Ad

More from Mark Niebergall (20)

Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023
Mark Niebergall
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023
Mark Niebergall
 
Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023
Mark Niebergall
 
Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022
Mark Niebergall
 
Developing SOLID Code
Developing SOLID Code
Mark Niebergall
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to Deployment
Mark Niebergall
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and Behat
Mark Niebergall
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and Behat
Mark Niebergall
 
Hacking with PHP
Hacking with PHP
Mark Niebergall
 
Relational Database Design Bootcamp
Relational Database Design Bootcamp
Mark Niebergall
 
Starting Out With PHP
Starting Out With PHP
Mark Niebergall
 
Advanced PHP Simplified - Sunshine PHP 2018
Advanced PHP Simplified - Sunshine PHP 2018
Mark Niebergall
 
Defensive Coding Crash Course Tutorial
Defensive Coding Crash Course Tutorial
Mark Niebergall
 
Inheritance: Vertical or Horizontal
Inheritance: Vertical or Horizontal
Mark Niebergall
 
Cybersecurity State of the Union
Cybersecurity State of the Union
Mark Niebergall
 
Cryptography With PHP - ZendCon 2017 Workshop
Cryptography With PHP - ZendCon 2017 Workshop
Mark Niebergall
 
Defensive Coding Crash Course - ZendCon 2017
Defensive Coding Crash Course - ZendCon 2017
Mark Niebergall
 
Leveraging Composer in Existing Projects
Leveraging Composer in Existing Projects
Mark Niebergall
 
Defensive Coding Crash Course
Defensive Coding Crash Course
Mark Niebergall
 
Impostor Syndrome: Be Proud of Your Achievements!
Impostor Syndrome: Be Proud of Your Achievements!
Mark Niebergall
 
Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023
Mark Niebergall
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023
Mark Niebergall
 
Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023
Mark Niebergall
 
Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022
Mark Niebergall
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to Deployment
Mark Niebergall
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and Behat
Mark Niebergall
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and Behat
Mark Niebergall
 
Relational Database Design Bootcamp
Relational Database Design Bootcamp
Mark Niebergall
 
Advanced PHP Simplified - Sunshine PHP 2018
Advanced PHP Simplified - Sunshine PHP 2018
Mark Niebergall
 
Defensive Coding Crash Course Tutorial
Defensive Coding Crash Course Tutorial
Mark Niebergall
 
Inheritance: Vertical or Horizontal
Inheritance: Vertical or Horizontal
Mark Niebergall
 
Cybersecurity State of the Union
Cybersecurity State of the Union
Mark Niebergall
 
Cryptography With PHP - ZendCon 2017 Workshop
Cryptography With PHP - ZendCon 2017 Workshop
Mark Niebergall
 
Defensive Coding Crash Course - ZendCon 2017
Defensive Coding Crash Course - ZendCon 2017
Mark Niebergall
 
Leveraging Composer in Existing Projects
Leveraging Composer in Existing Projects
Mark Niebergall
 
Defensive Coding Crash Course
Defensive Coding Crash Course
Mark Niebergall
 
Impostor Syndrome: Be Proud of Your Achievements!
Impostor Syndrome: Be Proud of Your Achievements!
Mark Niebergall
 
Ad

Recently uploaded (20)

Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
Hassan Abid
 
How Insurance Policy Management Software Streamlines Operations
How Insurance Policy Management Software Streamlines Operations
Insurance Tech Services
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Technologies
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
OpenTelemetry 101 Cloud Native Barcelona
OpenTelemetry 101 Cloud Native Barcelona
Imma Valls Bernaus
 
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
BradBedford3
 
Rierino Commerce Platform - CMS Solution
Rierino Commerce Platform - CMS Solution
Rierino
 
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Tech Services
 
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
Hassan Abid
 
How Insurance Policy Management Software Streamlines Operations
How Insurance Policy Management Software Streamlines Operations
Insurance Tech Services
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Technologies
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
OpenTelemetry 101 Cloud Native Barcelona
OpenTelemetry 101 Cloud Native Barcelona
Imma Valls Bernaus
 
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
BradBedford3
 
Rierino Commerce Platform - CMS Solution
Rierino Commerce Platform - CMS Solution
Rierino
 
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Tech Services
 
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 

Debugging PHP with Xdebug - PHPUK 2018

  • 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/50bee
  • 3. D E B U G G I N G P H P W I T H X D E B U G
  • 4. 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 • Drug screening project • UPHPU President • CSSLP, SSCP Certified and SME • Drones, fishing, skiing, father, husband
  • 5. A B O U T M A R K N I E B E R G A L L • Manchester • Nelson • Workington
  • 6. A B O U T M A R K N I E B E R G A L L
  • 7. A B O U T M A R K N I E B E R G A L L
  • 8. D E B U G G I N G P H P W I T H X D E B U G Overview • What is Xdebug • Why use Xdebug • Setting up Xdebug • Using Xdebug
  • 9. W H AT I S X D E B U G
  • 10. W H AT I S X D E B U G
  • 11. W H AT I S X D E B U G Xdebug • Step-into debugger • Profiler • DeBugGer Protocol (DBGp) for communication
  • 12. 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
  • 13. W H Y U S E X D E B U G
  • 14. W H Y U S E X D E B U G Debugging without Xdebug
  • 15. 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__);
  • 16. W H Y U S E X D E B U G Debugging without Xdebug 1. Add outputs 2. Load page 3. Look for output 4. Change some code 5. Add more outputs 6. Repeat 7. Cleanup outputs without missing any 8. Load page
  • 17. W H Y U S E X D E B U G Debugging with Xdebug
  • 18. W H Y U S E X D E B U G Debugging with Xdebug 1. Turn on debugging 2. Add breakpoint(s) 3. Load page 4. Step into the code
  • 19. W H Y U S E X D E B U G Debugging with Xdebug • Live values • Follow actual code path • Full stacktrace
  • 20. 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
  • 21. S E T T I N G U P X D E B U G
  • 22. S E T T I N G U P X D E B U G Fire up you development environment
  • 23. 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
  • 24. S E T T I N G U P X D E B U G 1. Install Xdebug
  • 25. S E T T I N G U P X D E B U G 1. Install Xdebug • https://xdebug.org/docs/install
  • 26. 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
  • 27. S E T T I N G U P X D E B U G 1. Install Xdebug • git clone https://github.com/xdebug/xdebug.git • cd xdebug • ./rebuild.sh
  • 28. 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 php72-xdebug • Linux: - wget http://xdebug.org/files/xdebug-2.6.0.tgz - sudo pecl install xdebug
  • 29. 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
  • 30. S E T T I N G U P X D E B U G 1. Install Xdebug • apt-get install php-xdebug • wget http://xdebug.org/files/xdebug-2.6.0.tgz
 tar -xzvf xdebug-2.6.0.tgz
 cd xdebug-2.6.0
 phpize
 ./configure --enable-xdebug
 make
 make install
  • 31. 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
  • 32. 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.6.0-7.2-vc15-nts-x86_64.dll
 
 [xdebug]
 xdebug.remote_enable = 1
 xdebug.remote_autostart = 1
 xdebug.remote_port = 9000
 xdebug.remote_host = localhost
 xdebug.idekey = PHPSTORM

  • 33. 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_autostart = 1
 xdebug.remote_port = 9000
 xdebug.remote_host = localhost
 xdebug.idekey = PHPSTORM

  • 34. 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
  • 35. 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
  • 36. S E T T I N G U P X D E B U G 1. Install Xdebug • Verify via phpinfo
  • 37. S E T T I N G U P X D E B U G 1. Install Xdebug • Verify via phpinfo
  • 38. S E T T I N G U P X D E B U G 2. Prepare PhpStorm
  • 39. S E T T I N G U P X D E B U G 2. Prepare PhpStorm • Start Listening for PHP Debug Connections
  • 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 2. Prepare PhpStorm
  • 42. S E T T I N G U P X D E B U G 2. Prepare PhpStorm • Setup debug settings
  • 44. S E T T I N G U P X D E B U G 2. Prepare PhpStorm • Setup project path mapping
  • 45. S E T T I N G U P X D E B U G 2. Prepare PhpStorm
  • 46. S E T T I N G U P X D E B U G 3. Set a breakpoint in the source code
  • 47. 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
  • 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 • Browser plugin, add-on - The easiest Xdebug (Firefox) - Xdebug Helper (Chrome) - Xdebug Toggler (Safari) - Xdebug launcher (Opera)
  • 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 • URL - GET: &XDEBUG_SESSION_START=PHPSTORM - POST: XDEBUG_SESSION_START=PHPSTORM • Headers - Name: Cookie - Value: XDEBUG_SESSION=PHPSTORM • Bookmarklet
  • 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 4. Activate debugger on server
  • 57. S E T T I N G U P X D E B U G 4. Activate debugger on server
  • 58. S E T T I N G U P X D E B U G 4. Activate debugger on server
  • 59. S E T T I N G U P X D E B U G 4. Activate debugger on server
  • 60. S E T T I N G U P X D E B U G 4. Activate debugger on server
  • 61. S E T T I N G U P X D E B U G 5. Start a debug session in browser
  • 62. 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
  • 63. S E T T I N G U P X D E B U G 6. Reload the current page
  • 64. S E T T I N G U P X D E B U G 6. Reload the current page
  • 65. S E T T I N G U P X D E B U G 7. Set initial path mappings
  • 66. S E T T I N G U P X D E B U G 7. Set initial path mappings
  • 67. U S I N G X D E B U G
  • 68. U S I N G X D E B U G
  • 69. U S I N G X D E B U G • Breakpoints • Stepping through code • Watches • Console
  • 70. U S I N G X D E B U G
  • 71. U S I N G X D E B U G Breakpoints • Pause code execution at specific line • Allowed multiple breakpoints • Conditional breakpoints
  • 72. 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
  • 73. U S I N G X D E B U G Breakpoints
  • 74. U S I N G X D E B U G Breakpoints
  • 75. U S I N G X D E B U G Stepping through code
  • 76. U S I N G X D E B U G Stepping through code • Resume Program (Play) • Stop • View Breakpoints • Disable All Breakpoints
  • 77. 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
  • 78. 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. U S I N G X D E B U G Watches
  • 80. U S I N G X D E B U G Watches • Live updates • Values • Expressions
  • 81. U S I N G X D E B U G Console
  • 82. U S I N G X D E B U G Console • Output from debugging expressions • Enter expressions to be evaluated
  • 83. S U M M A RY
  • 84. 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
  • 85. D I S C U S S I O N • Setup issues • Remote debugging • Profiling • Xdebug vs alternative methods
  • 86. Q U E S T I O N S ? https://joind.in/talk/50bee
  • 87. 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 • https://sievertschreiber.files.wordpress.com/2010/04/crane-truck-double-fail.jpg