Xdebug, outil de debug pour PHP

Xdebug est une extention PHP qui va vous aider à obtenir des informations utiles au debugage de vos script ainsi qu’à tracer la performance ou les enventuelles erreurs de vos scripts.

Il existe des version pour Linux et pour l’autre. J’ai oublié le nom de l’autre mais je sais qu’il ne faut surtout pas mettre un server php dessus. Par contre pour jouer au dernier jeux vidéo vous pouvez utiliser l’autre.

Bon revenons à nos moutons. Perso j’ai installé Xdebug par un simple urpmi (appt-get pour les nuls qui sont sur mandriva, comme moi, j’en parle ici) donc si vous voullez plus d’info sur la procédure d’installation voyez ici.

Les fonctionalités d‘xdebug sont les suivantes :

  • Affichages des erreurs trés complet et paramétrable.
  • Controle la récursivité des fonctions (par defaut limité à 64)
  • Suivit de l’allocation de mémoire
  • Traçage vos erreurs
  • Faire du profiling, trés utiles pour annalyser vos script, gérer la charge mémoire et optimiser en conséquences
  • Utilisation d’un client de débugage possible


Passons la procédure d’installation …

Une fois installé vous pouvez tester si votre extention est chargé comme ceci :


//Test chargement de xdebug
if(function_exists('xdebug_enable')) {
echo 'Xdebug -> Chargement OK';
} else {
echo 'Xdebug -> Ou qu\'il est Xdebug ?';
}
?>

Dans ma config xdebug est demarré automatiquement. Mais cela n’est pas conseillé sur un serveur en prod pour cause de ralentissement. Il est donc préférable de démarrer xdebug au sein de votre script avec xdebug_enable();

Concrétement voici un exemple d’affichage d’érreur, ici j’appelle une fonction bidon :


//Appel une fonction non définie
thefonctionquipu();
?>

Ce qui me donne à l’écran :
fonction non définie

Maintenant voici des exemples plus intéressants : le traçage et le profiling

Les exemples qui suivent vont annalyser la classe suivante. Notez au passage que cette classe ne sert à rien d’autre qu’a faire nimp. Voici le code de la classe :

//Class de test qui fait nimp
class testX {

function __construct() {
$this->strTestX = 'Ok on vas tester';
}

function doNimpStr($strToNik){
$strToNik = str_replace('','',utf8_encode(utf8_decode($strToNik)));
return $strToNik;
}

function doNimp($intIt){
for($i=0;$i<$intIt;$i++){
$this->strTestX.=$this->strTestX;
}
$strTmp = $this->strTestX;
$this->strTestX.=$this->doNimpStr($strTmp);
}

function htmlNimp(){
htmlentities($this->strTestX);
}

function __destruct() {
$this->strTestX = NULL;
}
}

?>

Imaginez maintenant que vous voullez tracer l’execution des fonctions doNimp et htmlNimp de la classe testX. Voici le code qui vous faut :

//Lancement du traçage
xdebug_enable();
xdebug_start_trace();

//Appell de nos fonctions qui servent à rien
$objTest = new testX;
$objTest->doNimp(15);
$objTest->htmlNimp();

//Affichage du traçage
xdebug_dump_function_trace();
//Fin du tracage
?>

Ce qui vous affichera :

Trace

Vous voyez ainsi toute la magie d’xdebug ! Vous pouvez suivre pas à pas les appelles aux fonctions. Savoir par qui elles ont été appellées, dans quel fichier, à quelles lignes elles se situent dans le script et plus intéressant le niveaux de la mémoire alloué durant l’execution du script.

Maintenant passont au profiling de cette ridicule classe :

//Lancement du profiling
xdebug_enable();
xdebug_start_profiling();

//Appell de nos fonctions qui servent à rien
$objTest = new testX;
$objTest->doNimp(15);
$objTest->htmlNimp();

//Affichage du profiling
//Le param de (0-9) corespond au type de trie
xdebug_dump_function_profile(0);
//Fin du profiling
xdebug_stop_profiling();

?>

Vous obtenez :

Profiling

Avec :

  • Opcode compiling : Temps que le Zend Engine a mis pour générer l’opcode.
  • Function Execution : Temps d’exécutions des fonctions.
  • Ambient Code Execution : Reste du temps d’exécution du code.
  • Total Execution : Temps total d’exécution.
  • Total Processing : Temps total.

Je vous ait presenté ici les exemples les plus basiques de l’utilisation d’xdebug. Beaucoup d’autres fonctions sont disponibles ici.

Votez : 1 Stars2 Stars3 Stars4 Stars5 Stars

2 commentaires »

  1. Gilles nous dit :

    Le 11 mai 2007 @ 11:06

    Excellent article de présentation. Thanks.

  2. IndicaDesBois nous dit :

    Le 11 mai 2007 @ 11:17

    De rien Gilles, Merci ;)

Flux RSS des commentaires de ce billet · URI de TrackBack

Laisser un commentaire

Bad Behavior has blocked 407 access attempts in the last 7 days.