Your SlideShare is downloading. ×
  • Like
debugging in PHP
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

debugging in PHP



Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads


Total Views
On SlideShare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. Debugging in PHP PHPCAMP 2008, Pune 20th Sept. Jignesh Thummar
  • 2. Debugging “Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” - Brian W. Kernighan, father of UNIX.
  • 3. Why do I need debugger? ● Good programmer always use debugger ● Are echo() and var_dump() enough capable? ● What about some complex program?
  • 4. Available debuggers for PHP APD (Advanced PHP Debugger) - - open source, but unmaintained Zend Debugger - - commercial DBG - - half commercial Xdebug
  • 5. Introducing Xdebug ● Xdebug – An open source debugging tool ● Developed by Derick Rethans – core PHP developer ● About 4 years old ● Current version 2.0.3 ● Works on Linux (at least), Windows and Mac
  • 6. Installation with PECL #pecl install xdebug without PECL #wget #tar -zxvf xdebug-2.0.3 #cd xdebug-2.0.3 #phpize #./configure #make #make install #cp modules/ /path/to/your/ext/directory Debian users: # sudo apt-get install php5-xdebug
  • 7. Enabling Xdebug in php.ini add: for Windows users ● download .dll from ● in php.ini add: zend_extension_ts=C:phpextxdebug.dll restart apache Note: Zend's extensions (optimizer, debugger, cache) prohibit Xdebug (and other non-Zend zend- extensions) from loading
  • 8. What is there in xdebug? xdebug provides ● stack traces and call traces ● profiling information of the script ● code coverage analysis ● remote debugging ● memory allocation, time tracking for function calls ● error/warning/notice messages more explainable
  • 9. PHP/Webserver is crashing? ● Really? ● When? stack overflow infinite recursion ● Need to protect it?
  • 10. Protection <?php function myfunction() { myfunction(); } myfunction(); ?> xdebug.max_nesting_level = 4
  • 11. debug the variables ● xdebug.show_local_vars=on ● Error display for superglobals ● xdebug.dump.COOKIE=* ● xdebug.dump.POST=login,useremail ● xdebug.dump.SESSION=sess_id,hash ● same for GET, FILES, SERVER, ENV, REQUEST demo
  • 12. color coded variables override var_dump() by xdebug_var_dump() xdebug.var_display_max_children xdebug.var_display_max_data xdebug.var_display_max_depth demo
  • 13. few important functions xdebug_memory_usage( ) xdebug_peak_memory_usage( ) xdebug_time_index( ) in seconds xdebug_enable() xdebug_disable() xdebug_call_class() xdebug_call_function() xdebug_call_file() xdebug_call_line()
  • 14. Execution Trace ● new to the team? ● team member left the project and you don't know what is happening in the script? ● want to know the flow of the script ● or want to do function traces ● show the value passed to functions/methods and also return values * ini options xdebug.auto_trace = 0 xdebug.trace_format =0 xdebug.trace_output_dir = /tmp/xdebug-traces xdebug.trace_options = 0 xdebug.trace_output_name = trace.%c // crc32, timestamp, pid, %r, scriptname etc.
  • 15. more options for trace ● xdebug.collect_params=0 // can make it 1,2,3,4 ● xdebug.collect_return=1 ● xdebug.collect_includes=on ● xdebug.show_mem_delta=1 functions for trace xdebug_start_trace(string trace_file [,integer options]) xdebug_stop_trace() xdebug_get_tracefile_name( ) demo
  • 16. Code Coverage Which code snippet do I use in my script? add in php.ini - xdebug.extended_info = 1 xdebug_start_code_coverage([int option]) XDEBUG_CC_UNUSED - XDEBUG_CC_DEAD_CODE - var_dump(xdebug_start_code_coverage()) xdebug_stop_code_coverage() demo
  • 17. Profiler ● functionality to analyze the performance of the script ● find out bottleneck in the script ● will give output in cachegrind compatible file viewable in KcacheGrind - KDE, Linux webgrind - WinCacheGrind – Windows users demo
  • 18. analyze running script DBGp – debugger protocol xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host= xdebug.remote_port=9000 xdebug.idekey=Jignesh xdebug.remote_log = /tmp/xdebug_remote_log
  • 19. need to install debugclient go to xdebug source directory # cd debugclient # ./buildconfig # ./configure --with=libedit # make # make install Editor supports : PDT(PHP Eclipse), VIM, Komodo, netbeans and many more demo it
  • 20. Resources
  • 21. Thanks Happy debugging :)