Xdebug
                           Daily helper and professional debugger


                                TobiasSchlitt <...
About me



      Tobias Schlitt <toby@php.net>
      PHP since 2001
      Freelancing consultant
      Qualified IT Specia...
Overview



1 About Xdebug


2 Installation


3 Development goodies


4 Tracing


5 More features...




Tobias Schlitt (P...
Outline




1 About Xdebug


2 Installation


3 Development goodies


4 Tracing


5 More features...




Tobias Schlitt (P...
Why a debugger?




       “I don’t need a debugger”
              There is no bug free code
              Make live easie...
What is Xdebug?




       Open Source debugger for PHP
       PHP (Zend Engine) extension
       Works (at least) on Linu...
Xdebug features




       Enhance daily work with PHP
       Trace PHP program runs
       Profile PHP applications
      ...
Outline



1 About Xdebug


2 Installation
       Installation
       Configuration

3 Development goodies


4 Tracing


5 ...
Via PEAR



       Easiest way to install
       Working PEAR assumed:
       $ pear install pecl/xdebug
       PEAR Insta...
Manual


       Compile by hand
       Typical PHP module compile process
                     wget h t t p : / / xdebug ....
Windows




       Download binary module from
              http://xdebug.org
              http://pecl4win.php.net/ext.p...
Add module to php.ini




       Not a “normal” extension
       Add to php.ini:
       zend extension = ”/path/to/xdebug....
Common pitfalls




        extension dir     directive does not take effect!
       Binary modules (Windows) do not work w...
Configuration




       Huge variety of options
       Most shown later, some not
       Overview: http://xdebug.org/docs/...
Outline


1 About Xdebug


2 Installation


3 Development goodies
       Error messages
       Dumping variables
       In...
Getting started




       Install module
       Switch it on
       Tweak some settings
       Work as usual




Tobias S...
Error messages




       PHP error messages not very useful
              Sometimes poor error location
              Alm...
Warnings

Functions producing warnings

f u n c t i o n openSomeFile ()
{
        r e t u r n o p e n M y F i l e ( ’ / p ...
Warnings

Triggering a warning

require once            ’ w a r n i n g / f u n c t i o n s . php ’ ;

f u n c t i o n per...
Warnings

Live
Let’s look what it does




Tobias Schlitt (PHP@FrOSCon 2009)   Xdebug   2009-08-23   18 / 36
Errors

Producing an exception

r e q u i r e o n c e ’ /home/ d o t x p / dev /PHP/ e z c o m p o n e n t s / t r u n k /...
Errors

Live
Let’s look what it does




Tobias Schlitt (PHP@FrOSCon 2009)   Xdebug   2009-08-23   19 / 36
var dump()



       Using var dump()
              Everyone does it
              There is nothing bad about it
       va...
var dump()



       Using var dump()
              Everyone does it
              There is nothing bad about it
       va...
Infinite loops




       Endless recursions
       Extremely hard to find
       Script just times out . . . or worse!
    ...
Infinite recursion

Producing an infinite recursion

f u n c t i o n d o u b l e F a c u l t y ( $num )
{
       /∗
        ...
Infinite recursion

Live
Let’s look what it does




Tobias Schlitt (PHP@FrOSCon 2009)   Xdebug   2009-08-23   22 / 36
Useful functions




       xdebug [en/dis ] able ()
       Manually switch stack traces on or off
       xdebug call [ cla...
Useful functions




        xdebug get declared vars ()
       Returns an array containing the names of all variables in ...
Useful functions




       xdebug time index()
       Returns the seconds since script run start




Tobias Schlitt (PHP@...
Declared vars

Getting declared variables

f u n c t i o n f o o ( $a , $b )
{
        g l o b a l $c ;
       $d = ’ I am...
Declared vars

Live
Let’s look what it does




Tobias Schlitt (PHP@FrOSCon 2009)   Xdebug   2009-08-23   24 / 36
Stack depth

Retrieving stack level

echo ” S t a c k d e p t h i n ” .          FILE     . ”: ” .
    x d e b u g g e t s...
Stack depth

Live
Let’s look what it does




Tobias Schlitt (PHP@FrOSCon 2009)   Xdebug   2009-08-23   25 / 36
Outline




1 About Xdebug


2 Installation


3 Development goodies


4 Tracing


5 More features...




Tobias Schlitt (P...
What is tracing?




       Check control flow of application
              Correct function calls
              Correct da...
Tracing



       Some developers trace like this:
                      echo ” Here I am ! ! ! ” ;
                      ...
Tracing with Xdebug




       By functions:
              xdebug start trace ()
              xdebug stop trace ()
      ...
Tracing example

A simple trace

f u n c t i o n d o u b l e F a c u l t y ( $num )
{
        i f ( $num < 3 )
       {
  ...
Tracing example

Live
Let’s look what it does




Tobias Schlitt (PHP@FrOSCon 2009)   Xdebug   2009-08-23   30 / 36
Notes on tracing




       Never trace in production!
       Tracing is extremely slow!
       grep & friends help a lot
...
Outline




1 About Xdebug


2 Installation


3 Development goodies


4 Tracing


5 More features...




Tobias Schlitt (P...
Profiling




       Which code takes which time?
       Find bottle necks in code
       Check your database queries and s...
Code coverage




       Mostly used in testing
       Which code is not covered by a test?
       PHPUnit can utilize thi...
Remote debugging

       Integrate Xdebug into your IDE
              Komodo IDE
              Eclipse




Tobias Schlitt ...
The end

                                    Thank you for listening!
       Are there any questions left?
       I hope y...
The end

                                    Thank you for listening!
       Are there any questions left?
       I hope y...
The end

                                    Thank you for listening!
       Are there any questions left?
       I hope y...
The end

                                    Thank you for listening!
       Are there any questions left?
       I hope y...
The end

                                    Thank you for listening!
       Are there any questions left?
       I hope y...
Upcoming SlideShare
Loading in...5
×

Xdebug

3,598

Published on

A one hour tutorial on daily work enhancements provided by the PHP debugging extension Xdebug.

Attention: This is a pre-release of the raw slides used in the presentation. A condensed version, including screeshots, might follow later.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,598
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
49
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Xdebug

  1. 1. Xdebug Daily helper and professional debugger TobiasSchlitt <toby@php.net> PHP@FrOSCon 2009 2009-08-23 Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 1 / 36
  2. 2. About me Tobias Schlitt <toby@php.net> PHP since 2001 Freelancing consultant Qualified IT Specialist Studying CS at TU Dortmund (expect to finish this year) OSS addicted PHP eZ Components PHPUnit Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 2 / 36
  3. 3. Overview 1 About Xdebug 2 Installation 3 Development goodies 4 Tracing 5 More features... Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 3 / 36
  4. 4. Outline 1 About Xdebug 2 Installation 3 Development goodies 4 Tracing 5 More features... Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 4 / 36
  5. 5. Why a debugger? “I don’t need a debugger” There is no bug free code Make live easier, use a debugger! “var dump(), print r() and echo are sufficient” In a lot of cases they are Debugging with them is slow and a lot of work “Using a debugger = using an IDE” No, but you can Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 5 / 36
  6. 6. What is Xdebug? Open Source debugger for PHP PHP (Zend Engine) extension Works (at least) on Linux, Mac and Windows About 5 years old Current stable version: 2.0.3 Created and maintained by Derick Rethans http://xdebug.org Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 6 / 36
  7. 7. Xdebug features Enhance daily work with PHP Trace PHP program runs Profile PHP applications Analyze code coverage (e.g. PHPUnit) Remote-debugging with an external client Including break-points, stepping, . . . Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 7 / 36
  8. 8. Outline 1 About Xdebug 2 Installation Installation Configuration 3 Development goodies 4 Tracing 5 More features... Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 8 / 36
  9. 9. Via PEAR Easiest way to install Working PEAR assumed: $ pear install pecl/xdebug PEAR Installer performs necessary steps: 1 Download source 2 Compiling module 3 Copying module to destination After that: Add module to php.ini Only on *nix systems Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 9 / 36
  10. 10. Manual Compile by hand Typical PHP module compile process wget h t t p : / / xdebug . o r g / l i n k . php ? u r l=xdebug201 t a r −x z f xdebug − 2 . 0 . 2 . t g z cd xdebug − 2 . 0 . 2 phpize . / c o n f i g u r e −−enable −xdebug −−w i t h −php−c o n f i g =/ u s r / b i n / php−c o n f i g make cp m o d u l e s / xdebug . s o /<m o d u l e p a t h >/xdebug . s o After that: Add module to php.ini Only on *nix systems Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 10 / 36
  11. 11. Windows Download binary module from http://xdebug.org http://pecl4win.php.net/ext.php/php_xdebug.dll Copy module to modules directory After that: Add module to php.ini Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 11 / 36
  12. 12. Add module to php.ini Not a “normal” extension Add to php.ini: zend extension = ”/path/to/xdebug.so” On Windows: zend extension ts For debug builds zend extension debug Check $ php −v or phpinfo() ; Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 12 / 36
  13. 13. Common pitfalls extension dir directive does not take effect! Binary modules (Windows) do not work with PHP debug builds −−enable−versioning prevents loading Other zend-extensions interfere with Xdebug Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 13 / 36
  14. 14. Configuration Huge variety of options Most shown later, some not Overview: http://xdebug.org/docs/all_settings Most options adjustably with ini set () at runtime, except for xdebug.extended info xdebug. profiler ∗ Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 14 / 36
  15. 15. Outline 1 About Xdebug 2 Installation 3 Development goodies Error messages Dumping variables Infinity Useful functions 4 Tracing 5 More features... Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 15 / 36
  16. 16. Getting started Install module Switch it on Tweak some settings Work as usual Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 16 / 36
  17. 17. Error messages PHP error messages not very useful Sometimes poor error location Almost no info on affected data No info on code context Xdebug enhances that for you! Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 17 / 36
  18. 18. Warnings Functions producing warnings f u n c t i o n openSomeFile () { r e t u r n o p e n M y F i l e ( ’ / p a t h / t o / f i l e ’ , ’ Reason t o open f i l e . ’ , a r r a y ( 2 3 , 4 2 , ’ Random d a t a . ’ ) ) ; } f u n c t i o n o p e n M y F i l e ( $path , $ r e a s o n , $ d a t a ) { r e t u r n fopen ( $path , ’ r ’ ) ; } function performOperationOnFile ( $ f i l e ) { r e t u r n f r e a d ( $ f i l e , 1024 ) ; } Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 18 / 36
  19. 19. Warnings Triggering a warning require once ’ w a r n i n g / f u n c t i o n s . php ’ ; f u n c t i o n performAComplexOperation () { $ f i l e = openSomeFile () ; return performOperationOnFile ( $ f i l e ) ; } echo p e r f o r m A C o m p l e x O p e r a t i o n ( ) ; Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 18 / 36
  20. 20. Warnings Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 18 / 36
  21. 21. Errors Producing an exception r e q u i r e o n c e ’ /home/ d o t x p / dev /PHP/ e z c o m p o n e n t s / t r u n k / Base / s r c / b a s e . php ’ ; function a u t o l o a d ( $className ) { r e t u r n ezcBase : : a u to l o ad ( $className ) ; } $pop3 = new e z c M a i l P o p 3 T r a n s p o r t ( ” l o c a l h o s t ” ) ; Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 19 / 36
  22. 22. Errors Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 19 / 36
  23. 23. var dump() Using var dump() Everyone does it There is nothing bad about it var dump() in the browser sucks Xdebug enhances var dump() Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 20 / 36
  24. 24. var dump() Using var dump() Everyone does it There is nothing bad about it var dump() in the browser sucks Xdebug enhances var dump() Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 20 / 36
  25. 25. Infinite loops Endless recursions Extremely hard to find Script just times out . . . or worse! Xdebug can protect you Note: Not from endless runs of loops! Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 21 / 36
  26. 26. Infinite recursion Producing an infinite recursion f u n c t i o n d o u b l e F a c u l t y ( $num ) { /∗ i f ( $num < 3 ) { r e t u r n $num ; } ∗/ r e t u r n $num ∗ d o u b l e F a c u l t y ( $num − 2 ) ; } echo d o u b l e F a c u l t y ( 10 ) ; Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 22 / 36
  27. 27. Infinite recursion Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 22 / 36
  28. 28. Useful functions xdebug [en/dis ] able () Manually switch stack traces on or off xdebug call [ class /function/ file / line ]() Get the call point of the currently running function xdebug dump superglobals() Dump super-globals as specified by INI setting Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 23 / 36
  29. 29. Useful functions xdebug get declared vars () Returns an array containing the names of all variables in the current scope xdebug get function stack () Returns the function stack trace as an array xdebug get stack depth() Get the current depth in the function stack Note: Includes also create a level! Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 23 / 36
  30. 30. Useful functions xdebug time index() Returns the seconds since script run start Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 23 / 36
  31. 31. Declared vars Getting declared variables f u n c t i o n f o o ( $a , $b ) { g l o b a l $c ; $d = ’ I am l o c a l ’ ; var dump ( x d e b u g g e t d e c l a r e d v a r s ( ) ) ; } $c = ’ I am g l o b a l ’ ; f o o ( 2 3 , 42 ) ; Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 24 / 36
  32. 32. Declared vars Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 24 / 36
  33. 33. Stack depth Retrieving stack level echo ” S t a c k d e p t h i n ” . FILE . ”: ” . x d e b u g g e t s t a c k d e p t h ( ) . ” nn” ; function foo () { echo ” S t a c k d e p t h i n ” . FUNCTION . ”: ” . x d e b u g g e t s t a c k d e p t h ( ) . ” nn” ; bar () ; } i n c l u d e ’ s t a c k d e p t h / d e e p e r s t a c k . php ’ ; echo ” C a l l i n g f o o ( ) from ” . FILE . ” nn” ; foo () ; Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 25 / 36
  34. 34. Stack depth Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 25 / 36
  35. 35. Outline 1 About Xdebug 2 Installation 3 Development goodies 4 Tracing 5 More features... Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 26 / 36
  36. 36. What is tracing? Check control flow of application Correct function calls Correct data Does input data produce correct workflow? Traces always depend on input data Almost impossible to create traces for every possible control flow Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 27 / 36
  37. 37. Tracing Some developers trace like this: echo ” Here I am ! ! ! ” ; // . . . echo ”Now I ’m h e r e ! ! ! Something i s : ” ; var dump ( $ s o m e t h i n g ) ; Works well in small scripts Horror in larger apps / libraries Debugging like this is a sh**load of work Almost impossible with 3rd party code Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 28 / 36
  38. 38. Tracing with Xdebug By functions: xdebug start trace () xdebug stop trace () Automatically (php.ini) xdebug.auto trace = ”1” Cannot be set via ini set () ! Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 29 / 36
  39. 39. Tracing example A simple trace f u n c t i o n d o u b l e F a c u l t y ( $num ) { i f ( $num < 3 ) { r e t u r n $num ; } r e t u r n $num ∗ d o u b l e F a c u l t y ( $num − 2 ) ; } x d e b u g s t a r t t r a c e ( ’ t r a c e s /60 s i m p l e t r a c e . x t ’ ) ; echo d o u b l e F a c u l t y ( 10 ) ; Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 30 / 36
  40. 40. Tracing example Live Let’s look what it does Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 30 / 36
  41. 41. Notes on tracing Never trace in production! Tracing is extremely slow! grep & friends help a lot Tuning configuration makes traces more usable More information through Xdebug mean Slower performance Higher memory consumption Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 31 / 36
  42. 42. Outline 1 About Xdebug 2 Installation 3 Development goodies 4 Tracing 5 More features... Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 32 / 36
  43. 43. Profiling Which code takes which time? Find bottle necks in code Check your database queries and setup first! Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 33 / 36
  44. 44. Code coverage Mostly used in testing Which code is not covered by a test? PHPUnit can utilize this http://www.phpunit.de Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 34 / 36
  45. 45. Remote debugging Integrate Xdebug into your IDE Komodo IDE Eclipse Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 35 / 36
  46. 46. The end Thank you for listening! Are there any questions left? I hope you learned what you expected? Contact me: Tobias Schlitt <toby@php.net> Slides will be up on Slideshare Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 36 / 36
  47. 47. The end Thank you for listening! Are there any questions left? I hope you learned what you expected? Contact me: Tobias Schlitt <toby@php.net> Slides will be up on Slideshare Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 36 / 36
  48. 48. The end Thank you for listening! Are there any questions left? I hope you learned what you expected? Contact me: Tobias Schlitt <toby@php.net> Slides will be up on Slideshare Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 36 / 36
  49. 49. The end Thank you for listening! Are there any questions left? I hope you learned what you expected? Contact me: Tobias Schlitt <toby@php.net> Slides will be up on Slideshare Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 36 / 36
  50. 50. The end Thank you for listening! Are there any questions left? I hope you learned what you expected? Contact me: Tobias Schlitt <toby@php.net> Slides will be up on Slideshare Tobias Schlitt (PHP@FrOSCon 2009) Xdebug 2009-08-23 36 / 36
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×