Debugging PHP Applications with Xdebug and Eclipse PDT

Posted by Hodge on Apr 13, 2008 in Eclipse, Programming, Technology, Web Development26 commentsPrint This Post

Xdebug LogoOK, so I have x64 Eclipse successfully installed and running with all the plugins I use for Web Application Development. But what about debugging? Sure, var_dump(), echo, print and so on are all valuable to me when debugging a script, but it’s always good to have more information.

Xdebug is a fantastic PHP extension, which is written by one of the PHP Core Developers, Derick Rethans. The current version is 2.0.3, and I set about installing it on my system, and integrating it into Eclipse PDT today.

Xdebug can be installed in a few different ways – by downloading the binaries from the site, compiling the source, or via PECL:

sudo pecl install xdebug

Some days, I just prefer to download compile the source, as it gives me more of an understanding of what is being installed and where, and this is one of those days:

cd ~/
mkdir xdebug
cd xdebug
wget http://www.xdebug.org/link.php?url=xdebug203
tar -zxvf xdebug-2.0.3.tgz
cd xdebug-2.0.3

The packages phpize and php-config are required to install Xdebug, and can be obtained by installing the relevant PHP development packages:

sudo apt-get install php4-dev

or

sudo apt-get install php5-dev

depending on the PHP version installed. After unzipping the Xdebug source, I ran

phpize

which output:

PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519

I then checked this against the table at http://www.xdebug.org/docs/install#phpize to see if my PHP version (5.2.3) was compatible with Xdebug – it matched up to the table’s 5.2.x PHP version row, so I went ahead and installed:

./configure --enable-xdebug --with-php-config=/usr/bin/php-config
make

which created a file xdebug.so in the modules subdirectory. This file needs to be copied (or moved) to the PHP Extension directory, which on my system is in /usr/lib/php5/20060613/. An easy way to find the PHP extension directory is to run:

locate mysql.so

ok, so I copied the xdebug.so to the extension directory:

sudo cp modules/xdebug.so /usr/lib/php5/20060613/

So far so good. Now PHP needs to be told about the extension, and to load it. This can be done by adding

zend_extension="/usr/lib/php5/20060613/xdebug.so"

to the php.ini file. However, on my Ubuntu system, the PHP extensions are activated by adding an .ini file to the /etc/php5/apache2/conf.d directory, for each extension installed. The .ini file is the extension_name.ini, so I created a file called xdebug.ini:

cd /etc/php5/apache2/conf.d
gksu gedit xdebug.ini

which for now, contains a single line:

zend_extension="/usr/lib/php5/20060613/xdebug.so"

After restarting the Apache server

sudo /etc/init.d/apache2 restart

I created a file called test.php in my Web Root directory, containing a call to the phpinfo() function:

<?php
phpinfo();
?>

and pointed my browser to http://localhost/test.php. Just before the “PHP Credits” section, is a small box containing information on Zend – and now, with a successful Xdebug installation, additional information on Xdebug:

Xdebug information output by phpinfo()

The same information can be found by opening a Terminal and running

php -m

to output the loaded modules, and towards the end of the output, you should see

[Zend Modules]
Xdebug

alternatively, run

php -i | grep Xdebug

and if Xdebug has been installed successfully, you should see

with Xdebug v2.0.3, Copyright (c) 2002-2007, by Derick Rethans

Now, Xdebug needs to be enabled before any scripts can be debugged! So, in the php.ini file (or in my case, the newly created /etc/php5/apache2/conf.d/xdebug.ini file) I added the lines:

xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"

and restarted Apache again:

sudo /etc/init.d/apache2 restart

running

php -i | grep xdebug

in the Terminal, or using the test.php file containing phpinfo() shows that the new settings are being used, and Xdebug is active and running.

Configuring Eclipse PDT:

Setting up Eclipse PDT to use the Xdebug extension is pretty simple. In Eclipse PDT, I opened Window -> Preferences, then clicked on PHP, expanded the tree, and selected Debug. I Chose Xdebug from the pull down menu for the PHP Debugger, the “Default PHP Server” (should already be set to localhost), and then created a new PHP Executable option by clicking on the PHP Executables link next to the PHP Executable pull down menu.

XDebug and Eclipse PDT

In the PHP Executables dialog, I Clicked Add, filled in the name (PHP with XDebug), and entered the path to the PHP executable – on my system this is /usr/bin/php but if you don’t know, then in a terminal, run

which php

to find out where the php command is run from. I also entered the location of php.ini – again, on my system, this is /etc/php5/apache2/php.ini – and selected XDebug as the PHP debugger:

Xdebug - set up PHP Executable in Eclipse PDT

Clicked OK, then went back to the PHP -> Debug preferences screen, and selected the PHP Executable just created in the PHP Executable pull down. Finally, in the Debug -> Workbench Options option in the left, I selected “Never” for the “allow multiple debug sessions” option, since Xdebug does not support them.

Finally, I needed to set the Default Web Browser in Eclipse, to that when I debug a script, the output is sent to Firefox. Again in Preferences, I navigated to General -> Web Browser, and clicked “New”. It’s pretty straight forward stuff – entering a name and location – Firefox, and /usr/bin/firefox. Again, if you don’t know the location of the firefox binary, in a terminal run:

which firefox

With this done, and the preferences saved, I can now debug my scripts using Xdebug!

Using Xdebug in PDT

References:

http://www.xdebug.org/docs/install
http://www.eclipse.org/pdt/documents/XDebugGuide.pdf
http://devzone.zend.com/article/2803-Introducing-xdebug


Something not quite right? Inaccuracies or invalid code? Didn’t work for you? Don’t like me using Ss instead of Zs? Add a comment below! All comments are welcome. Except spam, because spam is a bit crap.


eBay Logo  

Lot 6 New HP G60 15.6 Laptop Notebook Win 7 HDMI Webcam


Lot 6 New HP G60 15.6 Laptop Notebook Win 7 HDMI Webcam


$3,149.95


Lenovo ThinkPad X201s 5397FFU 5397-FFU Notebook/Laptop


Lenovo ThinkPad X201s 5397FFU 5397-FFU Notebook/Laptop


$2,646.40


Lenovo ThinkPad X201s 5413FFU 5413-FFU Notebook/Laptop


Lenovo ThinkPad X201s 5413FFU 5413-FFU Notebook/Laptop


$2,636.88


New Lenovo ThinkPad W510 43192RU Laptop Notebook


New Lenovo ThinkPad W510 43192RU Laptop Notebook


$2,494.99


Lenovo ThinkPad X200s 7469-5GU 74695GU Notebook/Laptop


Lenovo ThinkPad X200s 7469-5GU 74695GU Notebook/Laptop


$2,385.48


No related posts.

Related posts brought to you by Yet Another Related Posts Plugin.

Tags: , , ,

26 comments

» Comments RSS Feed
  1. [...] Read more at 64 Bit Jungle [...]

  2. Hi… thanks for your note.

    I have one question… Where I can get this eclipse theme? I want a dark interface to my Eclipse Installation.

    Sory, but my english is bad :(

    Thanks!

  3. I wanna say “Thank YOU”!!!
    You realy help me!

  4. wow! thouroughly explained and it actually all worked! Thanks so much!!!

  5. These are some of the best tutorials I have found for a ubuntu newbe like myself. you list every step and asssume nothing. I am learning a lot. However I am stuck.
    When I click on Debug (F11) a firefox ‘opening index.php’ window pops up and asks if I want to open or save the file!

    PHP is definitely installed (clicking run works) xdebug is on the phpinfo.
    When I tired to find the location of php, it could not be found (although it was definitely already there.) I tried reinstalling it and pointing to it, but that has made no difference. anyone have any ideas?

  6. Thanks for the positive feedback all!

    @Pablo – the theme is just an Ubuntu dark theme, with some updates to the Eclipse display settings to create a dark background in the editor. You can change them in the Eclipse Preferences – specifically, the General -> Editors -> Text Editors section, and the PHP -> Editor -> Syntax Colouring sections.

    @Sky – could be a PHP/Apache misconfiguration – can you post the results to:

    more /var/log/apache2/error.log | tail

    and also the error_log file in the root directory of the site you’re debugging, just after running the debugger? For example, if your website is being developed in /home//public_html then run:

    more /home//public_html/error_log | tail

  7. Thanks for helping

    more /var/log/apache2/error.log | tail

    [Sun Nov 16 13:20:15 2008] [notice] child pid 10261 exit signal Segmentation fault (11)
    [Sun Nov 16 13:21:54 2008] [notice] child pid 10263 exit signal Segmentation fault (11)
    [Sun Nov 16 13:21:54 2008] [notice] child pid 10264 exit signal Segmentation fault (11)
    [Sun Nov 16 15:16:45 2008] [notice] child pid 10289 exit signal Segmentation fault (11)

    Server root is /home/sky/www/ project root is /home/sky/www/TestProject2/
    more /home/sky/www/TestProject2/error_log | tail
    /home/sky/www/TestProject2/error_log: No such file or directory
    more /home/sky/www/error_log | tail
    /home/sky/www/error_log: No such file or directory

    I’m currently running on the all in one (europa) pdt package, using your method of runnging 32bit eclipse on a 64 ubuntu.

    I’ve tried Ganymede as per your instructions (both 64 and 32 bit). I get an error when I try and open php files, which I havn’t been able to find any help with :
    An error has occurred. See error log for more details.
    org.eclipse.dltk.internal.ui.editor.EditorUtility.getEditorInputModelElement(Lorg/eclipse/ui/IEditorPart;Z)Lorg/eclipse/dltk/core/IModelElement;

    I’ve also tried the zend all in one. php files run but the debugger does not catch anything.
    I’ve even tried getting xdebug to work on the zend instal but the software update does not work – can’t connect to server for some reason.

    I followed these instructions to instal AMP http://ubuntuguide.org/wiki/Ubuntu:Hardy#Install_a_LAMP_server_on_a_Desktop

  8. Update: I tried going through the whole process again.
    The only difference is that I am pointing at php5 in the preferences instead of php. (I tried this before with no effect.)
    It still does not work, but it no longer brings up the save dialog. It just loads the page and break points are not triggered. more /var/log/apache2/error.log | tail no longer lists the segmentation fault.

  9. It’s working.
    I added
    xdebug.remote_enable=On
    xdebug.remote_host=”localhost”
    xdebug.remote_port=9000
    xdebug.remote_handler=”dbgp”
    to the php.ini file rather than just the xdebug.ini file.
    could this be because the xdebug.ini file is in etc/php5/conf.d and not in /etc/php5/apache2 ?

  10. Hi Sky,

    glad to hear you got it all working! If you’re using Ununtu, the config file should be /etc/php5/apache2/conf.d/xdebug.ini since all of the apache/php config files are now split into modules in Ubuntu. Effectively, these are just extensions of the main php.ini file, and should be the same as adding the lines to php.ini. Since you have it working, I’d leave it be :)

    You may also be interested in Xdebug’s profiling functionality, by the way. You can switch it on by adding

    xdebug.profiler_enable = 1

    to the xdebug.ini (or, in your case the php.ini) file, then restart apache. Every time a page is processed, a file is dumped into the /tmp directory which you can open with a program such as kcachegrind and will give you a load of information on function processing time etc. Great for finding bottlenecks in code etc.

    Remember to switch profiling off when you don’t need it! Otherwise, you’ll have hundreds of files dumped.

  11. [...] information in my previous tutorial, Debugging PHP Applications with Xdebug and Eclipse PDT, can still be applied to [...]

  12. Thank you so much, you rock!

  13. Sky, I think I know what was you problem, as I’ve resolved the same just a minute ago:

    As told by Hodge, on Ubuntu you should have the configuration on xdebug.ini. That’s what I have and its working now, but it was not working before… so just after read your comment I went into my xdebug.ini with the intention of cut&paste its contents to the php.ini file to check if it solves also my problem but then I note that the double quotes on remote_host and remote_port values looks a bit weird, just a bit. I think I cut’n'pasted them from this webpage:

    http://techmania.wordpress.com/2008/07/02/debugging-php-in-eclipse-using-xdebug/

    And they was not pure ASCII characters.

    Effectively, I do a test with phpinfo and in xdebug section I found extrange characters on those fields:

    xdebug.remote_handler ”dbgp” ”dbgp”
    xdebug.remote_host ”localhost” ”localhost”

    So, I just change these weird quotes by normal double quotes, and everything began to work.

    I think that’s very possible that you’ve cut’n'paste the configuration from the same place, as there was a guy called “Sky” also posting comments there, and therefore your problem was the same. Later, you probably modify your php.ini copying data by hand of from this page instead of the other one, so the quotes was right ASCII characters.

    Regards,

  14. Good point Fran – always be careful to double check any configuration you copy & paste from sites, since as is often the case, characters such as double quotes are “beautified” by blog software, browsers etc. (unless contained within <code></code> tags)

  15. awesome article man.. it really helped alot.. thanks

  16. Hi I really hope somebody can help.
    I followed this tutorial very carefully and have xdebug installed correctly.
    My problem is that from PDT I cannot debug in a web page because it stalls with the message “waiting for XDebug Session”.
    I CAN use the script debug option.
    My php ini and using cli seem to report everything is as it should be.
    Furthermore I can actually write in XDebug function calls and get results. The anal side of me would like to get it working fully though, I have one of those personalities that can’t stand inperfection!
    Any ideas apreciated.

  17. sorry appreciated

  18. Hi, it? ok your article. Thanks

  19. This is a very clear tutorial.
    Worked out of the box for Ubuntu Jaunty, Eclipse PDT 2.
    Many thanks!

  20. @Garry Willits: Check the last page of http://www.eclipse.org/pdt/documents/XDebugGuide.pdf. HTH!

  21. I was also receiving “waiting for XDebug session” and figured out the problem. I had imported my project using SVN and the Default Web Browser had the absolute path to firefox on my mac. I changed this to /usr/bin/firefox and everything is working.

  22. nice tutorial.. i got a good explanation about debugger. it’s my first time using eclipse i always rely on var_dump()…. BTW, how can i achieve that exact kind of color theme? i’ve been looking all over the internet for a dark colored theme..

    thanks dude.

  23. buy cheap fedex lozol

  24. I solved my own version of this problem… After trying much of what I could find on the net, I thought to myself, “This is a Windows machine, I should reboot.” Nuff said.

  25. Newer version of PHP does not work with this.
    See http://munim.tumblr.com/post/917355998/how-to-setup-xdebug-on-xampp-and-eclipse

  26. [...] http://www.64bitjungle.com/tech/debugging-php-applications-with-xdebug-and-eclipse-pdt/ [...]

Leave a comment