Xdebug debugger

Last updated on
September 30, 2016 - 14:23

For advanced development a debugger may be very useful. A debugger will allow you to follow program execution and its effects, to observe the call stack of functions, and review the contents of variables at any point during execution.

Xdebug is the standard debugger in PHP.

The main site:

http://xdebug.org/

Some articles on setting up and using it:

Zend's Introducing Xdebug

Xdebug and PhpStorm
Xdebug and Sublime
Xdebug and Atom
Xdebug and Vim
Xdebug and NetBeans
Xdebug and Eclipse
Xdebug and Komodo

This Drupal module has additional tools for visualizing the Xdebug call traces:

http://drupal.org/project/visualize_backtrace

For working in Drupal 8, you will need to add this line to the xdebug section of your php configuration, either in xdebug.ini or php.ini, if you are using a version of xdebug prior to 2.3:

xdebug.max_nesting_level=1000

The default nesting level of 100 causes issues. See https://www.drupal.org/node/2158467 and https://www.drupal.org/node/2393531

building xdebug.so

I downloaded the php package from php.net at http://www.php.net/downloads.php#v5 For Mac 10.4 and 10.5 I have Xcode installed, which includes gcc and other necessary comilation-related packages.

To build xdebug.so I went to the directory (assuming you unpack the PHP source code archive in your home dir):

~/php-5.2.5/bin/bin

and ran:

$ ./pecl install xdebug

this built xdebug.so and placed it in the direcrtory:
~/php-5.2.5/bin/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so

For the particular combination of MAMP + Komodo IDE

For my version of MAMP I copied xdebug.so to the following dir
(final dir name may vary by PHP version):

/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/

make sure Zend optimizer is OFF in MAMP preferences.

Make sure to restart apache after making these changes to php.ini. After verifying the location of xdebug.so, add the following to your php.ini file (or perhaps /etc/php5/conf.d/xdebug.ini, depending on your operating system):

zend_extension=/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000

OR

you can add this to .htaccess in your Drupal root or a parent dir:

php_value xdebug.remote_enable on

These (among others) may also be useful to add to .htaccess if you want to profile
memory usage:

php_value xdebug.auto_trace On
php_value xdebug.show_mem_delta On

To debug in Komodo, make sure Debug >> Listen for Debug Connections is enabled. In Drupal, add the query string: ?XDEBUG_SESSION_START=1 .

Alternatively, using the "easy Xdebug" extension for Firefox or the Xdebug helper for Chrome, you can initiate an Xdebug session with one click, instead of having to add the query string.