270 likes | 446 Vues
Xdebug is an invaluable tool for PHP developers, offering robust debugging features such as stack traces, profiling, and coverage analysis. Initially released in 2002, Xdebug enhances error messages by displaying detailed parameter information and function traces. This guide covers installation, configuration, and practical usage of Xdebug, including its various modes for debugging, remote control functionalities, and integration with popular IDEs like Eclipse and NetBeans. Learn to tackle potential pitfalls and maximize your debugging efficiency with Xdebug.
E N D
Debugging PHP with Xdebug Stephanie Russell Zachary Klink
Free and open source Swiss army knife for PHP developers. • Developed by DerickRethans • Written in C • Initial release date: May 2, 2002 • Stable Release: 2.1.2; July 28, 2011 Xdebug
Stack and function traces in error messages • Full param display for user defined functions • Function name, file name and line number • Support for member functions • Memory allocation • Protection for infinite recursions • Profiling information for PHP scripts • Code coverage analysis • Debugger front-end to interactively debug Features
DBG • FirePHP • Gubed • PHP_Debug • MacGDBp Competition
Performance • Pause program execution • Usable with Eclipse, Netbeans, Notepad++, Chrome, Firefox, etc. Why Xdebug?
How to Xdebug Let’s dive a little deeper…
php.ini • When enabled, xdebug controls program execution. • As a server • GDB and DBGp • Remote control for PHP • Embedded into editor (no direct dealing with protocol itself) How to Xdebug
Modes: • Default: req. Makes xdebugalways connect to client when a script is started. • Second mode: jit. Only connect to the client on a breakpoint or error in script. • No setting in xdebug.remote_mode = default How to Xdebug
Negatives • Potential install/configuration nightmare • Compatibility issues Drawbacks
Internals How it works!
With remote debugging, embedded Xdebug in PHP acts as a client, and the IDE acts as a server. • The IP of the server is 10.0.1.2 with HTTP on port 80 • The IDE is on IP 10.0.1.42, so xdebug.remote_host is set to 10.0.1.42 • The IDE listens on port 9000, so xdebug.remote_port is set to 9000 • The HTTP request is started on the machine running the IDE • Xdebug connects to 10.0.1.42:9000 • Debugging runs, HTTP Response provided Internals – single dev
Setup is only slightly different: • The IP of the server is 10.0.1.2 with HTTP on port 80 • The IDE is on an unknown IP, so xdebug.remote_connect_back is set to 1 • The IDE listens on port 9000, so xdebug.remote_port is set to 9000 • The HTTP request is made, Xdebug detects the IP address from the HTTP headers • Xdebug connects to the detected IP (10.0.1.42) on port 9000 • Debugging runs, HTTP Response provided Internals – multiple dev
Tracks debug session through brower: cookies • URL variable XDEBUG_SESSION_START=name appended to URL • Xdebug emits cookie with name “XDEBUG_SESSION” with value “name.” • This expires in an hour. • DBGp protocol also passes this value to the init packet when connecting to debug client Internals – Debug session
When there is a GET or POST, the cookie is set, xdebug connects to a debug client. • To stop debug session (and destroy the cookie), add URL parameter XDEBUG_SESSION_STOP. • Xdebug not longer tries to connect to debug client. Internals – Debug session
Can specify one IP or multiple users • xdebug.remote_host or • If IP not known: xdebug.remote_connect_back Internals – Multiple Users
Installation Be sure to wear your helmet.
PHP 5 • Apache2 First
Apt-get • Compatibility with PHP release • Find installed xdebug.so • Edit php.ini file to add zend extension. • Remote host/port • Known IP (edit 09/22 or for multiple developers) • Port open Install
Netbeans Tools > Options > PHP • Set debug port = remote_port Integrate with Netbeans
Demo Valiantly attempting to avoid Murphy’s law
Resources Research is key to success
http://www.firephp.org/HQ/Use.htm • http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/ • http://www.php-debugger.com/dbg/ • http://gubed.mccabe.nu/ • http://coding.smashingmagazine.com/2009/01/20/50-extremely-useful-php-tools/ • http://www.bluestatic.org/software/macgdbp/ Competition Resources
http://xdebug.org/docs/remote • http://ubuntuforums.org/showthread.php?t=525257 • http://scottfaisal.com/installing-xdebug-on-ubuntu-10-04/ • http://2bits.com/articles/setting-up-xdebug-dbgp-for-php-on-debian-ubuntu.html • http://netbeans.org/kb/docs/php/configure-php-environment-ubuntu.html • http://wiki.netbeans.org/HowToConfigureXDebug • http://stackoverflow.com/questions/693074/how-to-debug-php-with-netbeans-and-xdebug • http://blogs.oracle.com/netbeansphp/entry/howto_check_xdebug_installation Installation Resources
http://xdebug.org Everything Else Resources