Xdebug

  • Published on
    01-Sep-2014

  • View
    3.246

  • Download
    6

DESCRIPTION

Slides from my Xdebug talk at PHP World Kongress 2009.

Transcript

Xdebug Alltagshilfe und professioneller Debugger TobiasSchlitt PHP World Kongress 2009 2009-11-24 Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 1 / 41 About me Tobias Schlitt PHP since 2001 Freelancing consultant Qualied IT Specialist Studying CS at TU Dortmund (nishing mid 2010) OSS addicted eZ Components PHPUnit Various other projects . . . Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 2 / 41 Overview 1 About Debugging 2 Installation 3 Development goodies 4 Tracing 5 More features... 6 The end Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 3 / 41 Outline 1 About Debugging 2 Installation 3 Development goodies 4 Tracing 5 More features... 6 The end Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 4 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 Why a debugger? I dont need a debugger No bug free code Living life the easy way . . . var dump(), print r() and echo Sometimes, yes Slow and a lot of work Using a debugger = using an IDE No, but you can Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 5 / 41 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.5 Created and maintained by Derick Rethans http://xdebug.org Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 6 / 41 Xdebug features Enhance daily work with PHP Trace PHP program runs Prole PHP applications Analyze code coverage (e.g. PHPUnit) Remote-debugging with an external client Including break-points, stepping, . . . Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 7 / 41 Outline 1 About Debugging 2 Installation Installation Conguration 3 Development goodies 4 Tracing 5 More features... 6 The end Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 8 / 41 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 World Kongress 2009) Xdebug 2009-11-24 9 / 41 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=xdebug205 t a r x z f xdebug 2 . 0 . 5 . t g z cd xdebug 2 . 0 . 5 phpize . / c o n f i g u r e enable xdebug w i t h phpc o n f i g =/ u s r / b i n / phpc o n f i g make cp m o d u l e s / xdebug . s o //xdebug . s o After that: Add module to php.ini Only on *nix systems Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 10 / 41 Windows Download binary module from http://xdebug.org Copy to modules directory After that: Add module to php.ini Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 11 / 41 Add module to php.ini Not a normal extension Add to php.ini: zend extension = /path/to/xdebug.so For threadsafe builds: zend extension ts For debug builds zend extension debug Check $ php v or phpinfo() ; Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 12 / 41 Common pitfalls extension dir directive does not take eect! Binary modules (Windows) do not work with PHP debug builds enableversioning prevents loading Other zend-extensions interfere with Xdebug Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 13 / 41 Conguration Huge variety of options Many shown later Overview: http://xdebug.org/docs/all_settings Most options adjustably with ini set () at runtime, except for xdebug.extended info xdebug. proler Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 14 / 41 Outline 1 About Debugging 2 Installation 3 Development goodies Error messages Dumping variables Innity Useful functions 4 Tracing 5 More features... 6 The end Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 15 / 41 Getting started Install module Switch it on Tweak some settings Work as usual Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 16 / 41 Error messages PHP error messages not very useful Sometimes poor error location Almost no info on aected data No info on code context Xdebug enhances that for you! Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 17 / 41 Lets dig into some code Lets dig into some code Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 18 / 41 var dump() Using var dump() Everyone does it There is nothing bad about it var dump() in the browser sucks Xdebug enhances var dump() Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 19 / 41 Innite loops Endless recursions Extremely hard to nd Script just times out . . . or worse! Xdebug can protect you Note: Not from endless runs of loops! Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 20 / 41 Lets dig into some code Lets dig into some code Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 21 / 41 Useful functions xdebug [en/dis ] able () Manually switch stack traces on or o xdebug call [ class /function/ le / line ]() Get the call point of the currently running function xdebug dump superglobals() Dump super-globals as specied by INI setting Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 22 / 41 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 World Kongress 2009) Xdebug 2009-11-24 22 / 41 Lets dig into some code Lets dig into some code Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 23 / 41 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 World Kongress 2009) Xdebug 2009-11-24 24 / 41 Lets dig into some code Lets dig into some code Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 25 / 41 Stack depth Retrieving stack level echo ; 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 ; Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 26 / 41 Lets dig into some code Lets dig into some code Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 27 / 41 Outline 1 About Debugging 2 Installation 3 Development goodies 4 Tracing 5 More features... 6 The end Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 28 / 41 What is tracing? Check control ow of application Correct function calls Correct data Does input data produce correct workow? Traces always depend on input data Almost impossible to create traces for every possible control ow Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 29 / 41 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 World Kongress 2009) Xdebug 2009-11-24 30 / 41 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 World Kongress 2009) Xdebug 2009-11-24 31 / 41 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 World Kongress 2009) Xdebug 2009-11-24 32 / 41 Lets dig into some code Lets dig into some code Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 33 / 41 Notes on tracing Never trace in production! Tracing is extremely slow! grep & friends help a lot Tuning conguration makes traces more usable More information through Xdebug mean Slower performance Higher memory consumption Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 34 / 41 Outline 1 About Debugging 2 Installation 3 Development goodies 4 Tracing 5 More features... 6 The end Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 35 / 41 Proling Which code takes which time? Find bottle necks in code Check your database queries and setup rst! Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 36 / 41 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 World Kongress 2009) Xdebug 2009-11-24 37 / 41 Remote debugging Integrate Xdebug into your IDE Komodo IDE Eclipse Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 38 / 41 Outline 1 About Debugging 2 Installation 3 Development goodies 4 Tracing 5 More features... 6 The end Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 39 / 41 Questions / Answers Questions? Feedback? Critics? Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 40 / 41 The end I hope you enjoyed the session Slides and material http://schlitt.info/opensource http://www.slideshare.net/tobyS Contact: Tobias Schlitt Tobias Schlitt (PHP World Kongress 2009) Xdebug 2009-11-24 41 / 41