Php xdebug
Introduction
Xdebug est une extension qui facilite le développement et le débogage des scripts / applications PHP. Vous pouvez mettre des points d'arrêts dans votre code pour stopper l'exécution de votre code et voir le contenu des variables.
Xdebug permet :
- de voir les « Stack Traces » et ainsi afficher la pile d’appels des fonctions menant à l’erreur ;
- d'afficher les informations de profiling permettant de mesurer combien de temps a été passé dans une fonctions pour ainsi optimiser une application ;
- d'analyser la couverture du code pour effectuer de meilleurs tests.
Installation
Avant d'aller plus loin, n'oubliez pas que le dépôt Webtatic permet d'installer les dernières version de PHP.
L'installation n'est pas très compliquée, une fois que vous avez identifié votre version de PHP :
# php -v PHP 7.0.18 (cli) (built: Apr 15 2017 07:29:51) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
Il suffit d'installer la bonne version de Xdebug :
# yum -y search xdebug Modules complémentaires chargés : fastestmirror Loading mirror speeds from cached hostfile * base: centos.mirror.ate.info * epel: mirror.ibcp.fr * extras: centos.mirror.ate.info * updates: mirrors.standaloneinstaller.com * webtatic: uk.repo.webtatic.com ========================================== N/S Matched: xdebug ========================================== php-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php55w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php56w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php70w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php71w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
Dans ce cas précis, la bonne version est la 7.0 :
# yum -y install php70w-pecl-xdebug.x86_64
Configuration de PHP
Il faut maintenant configurer PHP pour qu'il active Xdebug à chaque fois que l'on exécute un script.
Vous pouvez procéder de deux façons différentes. Soit on applique cette configuration à l'intégralité de la machine, soit on créer un fichier de configuration spécialement pour Xdebug.
Pour ajouter la configuration Xdebug à toute la machine, il faut effectuer les modifications suivante directement dans le fichier /etc/php.d/xdebug.ini. Sinon, vous pouvez copier le fichier php.ini en php-xdebug.ini avant d'ajouter les modifications à la fin :
; Configure les quantités de données affichées par la fonction var_dump xdebug.var_display_max_children = 128 xdebug.var_display_max_data = 1024 xdebug.var_display_max_depth = 8 ; Configure les données affichées dans les stack traces xdebug.collect_includes = 1 ; Noms de fichiers xdebug.collect_params = 2 ; Paramètres de fonctions / méthodes ; Affiche une stack trace à chaque fois qu'une exception est levée, même si elle est catchee xdebug.show_exception_trace = 0 ; Le nombre maximal de profondeur d'appels de fonctions ; (Sécurité contre les récursions infinies) xdebug.max_nesting_level = 64 ; Active le debug à distance pour HTTPd par exemple xdebug.remote_enable = 1
Exemple d'affichage
CLI
Prenons le code suivant :
<?php
$debug = array (
'hello, world!',
array ( '1','2' => ( object ) array ( 'chaine',1,TRUE)),
array ('xml' => simplexml_load_string (
'<?xml version="1.0" encoding="UTF-8"?>
<root>
<utilisateur id="1">
<name>Jc</name>
<age>31</age>
</utilisateur>
<utilisateur id="2">
<name>Gérard</name>
<age>50</age>
</utilisateur>
</root>'
)
)
);
var_dump ( $debug );
?>
Cet exemple affichera les données comme ceci : |
Au lieu de : |
# php -f test.php /root/workspace/XDebug/src/test.php:21: array(3) { [0] => string(13) "hello, world!" [1] => array(2) { [0] => string(1) "1" [2] => class stdClass#1 (3) { public ${0} => string(6) "chaine" public ${1} => int(1) public ${2} => bool(true) } } [2] => array(1) { 'xml' => class SimpleXMLElement#2 (1) { public $utilisateur => array(2) { [0] => class SimpleXMLElement#3 (3) { public $@attributes => array(1) { 'id' => string(1) "1" } public $name => string(2) "Jc" public $age => string(2) "31" } [1] => class SimpleXMLElement#4 (3) { public $@attributes => array(1) { 'id' => string(1) "2" } public $name => string(7) "Gérard" public $age => string(2) "50" } } } } } |
# php -f test.php array(3) { [0]=> string(13) "hello, world!" [1]=> array(2) { [0]=> string(1) "1" [2]=> object(stdClass)#1 (3) { [0]=> string(6) "chaine" [1]=> int(1) [2]=> bool(true) } } [2]=> array(1) { ["xml"]=> object(SimpleXMLElement)#2 (1) { ["utilisateur"]=> array(2) { [0]=> object(SimpleXMLElement)#3 (3) { ["@attributes"]=> array(1) { ["id"]=> string(1) "1" } ["name"]=> string(2) "Jc" ["age"]=> string(2) "31" } [1]=> object(SimpleXMLElement)#4 (3) { ["@attributes"]=> array(1) { ["id"]=> string(1) "2" } ["name"]=> string(7) "Gérard" ["age"]=> string(2) "50" } } } } } |
Web
Il en va de même côté Web
Avec Xdebug : |
Sans Xdebug : |
/var/www/html/test.php:21: array (size=3) 0 => string 'hello, world!' (length=13) 1 => array (size=2) 0 => string '1' (length=1) 2 => object(stdClass)[1] public 0 => string 'chaine' (length=6) public 1 => int 1 public 2 => boolean true 2 => array (size=1) 'xml' => object(SimpleXMLElement)[2] public 'utilisateur' => array (size=2) ... |
array(3) { [0]=> string(13) "hello, world!" [1]=> array(2) { [0]=> string(1) "1" [2]=> object(stdClass)#1 (3) { [0]=> string(6) "chaine" [1]=> int(1) [2]=> bool(true) } } [2]=> array(1) { ["xml"]=> object(SimpleXMLElement)#2 (1) { ["utilisateur"]=> array(2) { [0]=> object(SimpleXMLElement)#3 (3) { ["@attributes"]=> array(1) { ["id"]=> string(1) "1" } ["name"]=> string(2) "Jc" ["age"]=> string(2) "31" } [1]=> object(SimpleXMLElement)#4 (3) { ["@attributes"]=> array(1) { ["id"]=> string(1) "2" } ["name"]=> string(7) "Gérard" ["age"]=> string(2) "50" } } } } } |
Xdebug n'améliore pas uniquement le rendu de var_dump mais également les stacks trace ou encore les messages d'erreurs !
Arrêter l'exécution
CLI
Tout d'abord, assurez-vous d'avoir correctement configuré Eclipse.
Pour faire du debug de script PHP, il faut spécifier l'utilisation de Xdebug dans les préférences d'Eclipse :
Au lieu d'exécuter le script avec le bouton Run il faut le lancer avec le bouton Debug , ou bien avec le menu contextuel :
Lorsque c'est la première fois que vous entrez en mode Debug, Eclipse vous propose de modifier la perspective.
Vous pouvez cocher la case et valider pour accéder à la perspective Debug.
Web
Ajout d'un serveur Web
Il faut commencer par déclarer notre serveur Apache HTTPd, que l'on à installé, dans Eclipse. Pour cela, direction Window → Preferences → PHP → Server pour cliquer sur le bouton New. Ci-dessous la configuration :
Répertoire de travail et URL par défaut |
Configuration Xdebug |
Création du projet
Le projet Web est comme pour un projet PHP classique, sauf que la partie environnement d'exécution diffère un peu.
Il faut placer le projet dans le répertoire de travail du serveur Web, pour Apache HTTPd, il s'agit de /var/www/html.
Configuration de debug
Une fois le projet créé, il suffit d'ajouter une configuration de debug sur le point d'entrée du site, généralement index.php
Ouverture de la fenêtre de debug |
Spécification du point d'entrée |
Configuration de Xdebug |
Phase de debug
Au lieu d'exécuter le script avec le bouton Run il faut le lancer avec le bouton Debug , ou bien avec le menu contextuel :
Lorsque l'on veut arrêter le debug, il suffit de cliquer sur le bouton stop et le navigateur indique que la session est terminée:
Bouton stop |
Fin de session debug |