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 :

Capture-debug_test.png

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 :

Capture-debug_test_2.png

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 :

Capture--home-jean-philippe-crc32__-home-jean-philippe-Bureau-debug_test.php__-_KCachegrind.png

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

Bon debug!