Debug php pas à pas et profiling de scripts avec XDebug, Vim et KCacheGrind
Par Jean-Philippe Serafin le mardi, septembre 30 2008, 11:39 - Lien permanent
Afin d'optimiser et d'accelérer le développement de vos scripts PHP, la mise en place d'un environement de debug et de profiling s'impose.
Configuration de xdebug dans le php.ini
Après avoir compilé et installé xdebug comme décrit sur le blog de Stéphane, deux ou trois configurations du php.ini s'avèrent nécessaires afin d'obtenir le niveau de debugage souhaité.
zend_extension="/usr/local/php53/xdebug.so" [debug] ; Remote settings xdebug.remote_autostart=on xdebug.remote_enable=on xdebug.remote_handler=dbgp ;xdebug.remote_handler=gdb xdebug.remote_mode=req xdebug.remote_host=localhost xdebug.remote_port=9000 ; General xdebug.auto_trace=on xdebug.collect_includes=on xdebug.collect_params=on xdebug.collect_vars=on xdebug.collect_return=on xdebug.default_enable=on xdebug.extended_info=1 xdebug.manual_url=http://www.php.net xdebug.show_local_vars=1 xdebug.show_mem_delta=1 xdebug.max_nesting_level=100 ; Trace options xdebug.trace_format=1 xdebug.trace_output_dir=/home/jean-philippe xdebug.trace_options=1 xdebug.trace_output_name=crc32 ; Profiling xdebug.profiler_append=1 xdebug.profiler_enable=1 xdebug.profiler_enable_trigger=1 xdebug.profiler_output_dir=/home/jean-philippe xdebug.profiler_output_name=crc32
Ainsi, les logs de profiling seront stockés dans le fichier /home/jean-philippe/crc32, et le serveur de debug sera disponible sur le port 9000 de la machine local.
Installation de vim et configuration du plugin debug
Sur ubuntu une version améliorée de vim est disponible dans les paquets officiels, on la télécharge accompagnée de l'interpréteur python qui servira pour le plugin.
sudo apt-get install vim-gtk vim-python
Il faut ensuite télécharger et installer le plugin disponible sur vim.org en copiant les deux fichiers (debugger.py debugger.vim) dans le répertoire de plugin de vim.
Chez moi :
/usr/share/vim/addons/plugin/
Test du debugueur pas à pas
Afin de tester le debug pas à pas, nous allons écrire un petit script de test debug_test.php :
<?php $toto='toto'; $array=array( 'valeur_1', 'valeur_2', 'valeur_3' ); //initialisation d'un point d'arret dans le code xdebug_break(); foreach ($array as $key => $value) { echo $value; }
ensuite on lance vim.gtk via la commande :
vim.gtk
Puis on appuie sur <F5>, vim se met alors à l'écoute du port 9000 pendant 5 secondes afin de detecter un éventuel debugage.
On lance alors le script de test dans les 5 secondes imparties :
php debug_test.php
puis si on rappuie sur <F5>, le curseur de vim va se placer sur notre point d'arrêt :

Ensuite on appuie plusieurs fois sur <F3> afin de suivre l'execution de notre script, au dexième tour du "foreach", on va placer le curseur sur $value et on appuie sur <F12>, on peut alors visualiser la valeur de la variable dans la fenettre WATCH_WINDOW :

Nous voilà prêt à débugger nos applications, via un vrai pas à pas!
Profiling de scripts php avec kcachegrind
On installe et lance KCacheGrind :
sudo apt-get install kcachegrind kcachegrind &
Ensuite, on ouvre notre fichier crc32, et on peut analyser les cycles d'exécution de notre script :

Evidement, le profiling s'avère interessant sur des scripts plus conséquents.
Bon debug!