web-dev-qa-db-fra.com

Vérifiez si xdebug fonctionne

Sans installer un éditeur de texte ou un IDE, est-il possible de vérifier si xdebug fonctionne, c'est-à-dire s'il peut déboguer du code php?

La seule partie que xdebug apparaisse dans phpinfo () est la suivante:

Des fichiers .ini supplémentaires analysés /etc/php5/Apache2/conf.d/mysql.ini, /etc/php5/Apache2/conf.d/mysqli.ini, /etc/php5/Apache2/conf.d/pdo.ini, /etc/php5/Apache2/conf.d/pdo_mysql.ini, /etc/php5/Apache2/conf.d/xdebug.ini

Cela n'est mentionné nulle part ailleurs dans phpinfo ().

69
oshirowanen

Sans faire un peu de débogage, je suppose que vous ne pouvez pas être certain qu'un débogueur fonctionne.

Mais vous pouvez être assez sûr - je suppose que l’on devrait supposer que si certains aspects de xDebug fonctionnent, tout fonctionnerait.

Dans ce cas, vous pouvez confirmer que xDebug est installé et en place en essayant les solutions suivantes:

1) phpinfo() - cela vous montrera toutes les extensions qui sont chargées, y compris xDebug. Si c'est le cas, il y a fort à parier que cela fonctionne.

2) Si cela ne vous convient pas, vous pouvez essayer d’utiliser la fonction var_dump(). xDebug modifie la sortie de var_dump() pour inclure des informations supplémentaires. Si cela est en place, alors xDebug fonctionne.

3) xDebug modifie la sortie d'erreur de PHP. Si votre programme se bloque avec xDebug en place, vous obtiendrez plus d'informations sur l'échec qu'avec la sortie standard de la PHP crash.

4) xDebug ajoute également un certain nombre de fonctions d’aide à PHP. Vous pouvez essayer n'importe lequel d’entre eux pour voir s’il fonctionne. Par exemple, la fonction xdebug_get_code_coverage() doit exister et renvoyer un tableau. Si tel est le cas, xDebug est installé. Sinon, ça ne l'est pas.

77
Spudley

Courir

php -m -c

dans votre terminal, puis recherchez [Zend Modules]. Il devrait être quelque part là-bas s'il est chargé!

NB

Si vous utilisez Ubuntu, il se peut que cela ne s'affiche pas ici car vous devez ajouter les paramètres xdebug à partir de /etc/php5/Apache2/php.ini en /etc/php5/cli/php.ini. Les miens sont

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_Host=localhost
xdebug.remote_port=9000
55
Luke Madhanga

Essayez comme suit, devrait retourner "existe" ou "non existe":

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';
25
KsaR

Après une période amère de près de 24 heures pour essayer de faire fonctionner xdebug avec Netbeans 8.0.2, j'ai trouvé une solution qui, j'espère, fonctionnera pour toutes les piles associées à Ubuntu et Ubuntu.

Numéro du problème 1: PHP et xdebug doivent être compatibles

Parfois, si vous exécutez une installation Linux et qu'apt-get installera xdebug, la version appropriée de xdebug ne vous sera pas fournie. Dans mon cas, j'avais la dernière version de PHP mais une ancienne version de xdebug. Cela doit être dû à ma version actuelle de Xubuntu. Les versions logicielles dépendent des référentiels, qui dépendent de la version du système d'exploitation que vous exécutez.

Solution: PHP a un gestionnaire d’extensions soigné appelé PECL. Suivez les instructions données ici pour le faire fonctionner. Tout d'abord, comme l'a souligné un membre lors des commentaires, vous devez installer le package de développement de PHP pour que PECL fonctionne:

Sudo apt-get install php5-dev

Ensuite, en utilisant PECL, vous pourrez installer la dernière version stable de xdebug:

Sudo pecl install php5-xdebug

Une fois que vous le faites, la version appropriée de xdebug sera installée mais pas prête à être utilisée. Après cela, vous devrez l'activer. J'ai vu de nombreuses suggestions sur la façon de le faire, mais le fait est que PHP nécessite que certains modules soient activés à la fois sur le client et sur le serveur, dans ce cas Apache. Il semble que la meilleure pratique consiste à utiliser la méthode intégrée d'activation de modules, appelée php5enmod, qui décrit l'utilisation: ici .

Problème n ° 2: activer le module correctement

Tout d’abord, vous devrez aller dans le dossier/etc/php5. Vous y trouverez 3 dossiers, Apache2, cli et mods_available. Le dossier mods_available contient des fichiers texte avec des instructions pour activer un module donné. La convention de nom est [module] .ini. Jetez un coup d'œil à l'intérieur de quelques-uns d'entre eux, voyez comment ils sont installés.

Vous devez maintenant créer votre fichier ini dans le dossier mods_available. Créez un fichier nommé xdebug.ini et dans le fichier, collez ceci:

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_Host=localhost
xdebug.remote_port=9000

Assurez-vous que la directive [xdebug] est présente, exactement comme dans l'exemple ci-dessus. Il est impératif que le module fonctionne. En fait, il suffit de copier et coller tout le code pour que vous deveniez une personne plus heureuse. :RÉ

Remarque: le chemin zend_extension est très important. Sur cet exemple, il pointe vers la version actuelle du moteur PHP, mais vous devez d’abord aller dans/usr/lib/php5 et vous assurer que le dossier nommé avec des nombres est le bon. Ajustez le nom à tout ce que vous voyez là-bas, et pendant que vous y êtes, vérifiez à l'intérieur du dossier que le xdebug.so est vraiment là. Il devrait l'être si vous avez tout fait correctement.

Maintenant, avec votre xdebug.ini créé, il est temps d'activer le module. Pour ce faire, ouvrez une console et tapez:

php5enmod xdebug

Si tout s'est bien passé, PHP a créé deux liens vers ce fichier, l'un à l'intérieur de /etc/php5/Apache2/conf.d et l'autre à /etc/php5/cli/conf.d

Redémarrez votre serveur Apache et tapez ceci sur la console:

php -v

Vous devriez obtenir quelque chose comme ça:

PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans

Ce qui signifie que le client PHP a lu votre fichier xdebug.ini et chargé le module xdebug.so. Jusqu'ici tout va bien.

Créez maintenant un script phpinfo sur votre serveur Web et exécutez-le. Voici ce que vous devriez voir, si tout se passait bien:

enter image description here

Si vous voyez cela, Apache a également chargé le module et vous êtes probablement prêt à partir. Voyons maintenant si Netbeans va déboguer correctement. Créez un script très simple, ajoutez des variables, donnez-leur des valeurs et définissez un point de rupture. Maintenant, appuyez sur CTRL + F5, cliquez sur "Intervenir" sur votre panneau de débogage, et voyez si vous obtenez quelque chose comme ceci:

xdebug in action

N'oubliez pas de vérifier la configuration de Netbeans pour le débogage, sous tools/options/php. Ça devrait ressembler a quelque chose comme ca:

Debugging configurations on Netbeans

J'espère que cela jette un peu de lumière sur ce problème plutôt obscur et déroutant.

Meilleurs vœux!

22

vous pouvez exécuter ce petit code php

<?php
phpinfo();
?>

Copiez toute la page de sortie, collez-la dans ceci lien . Puis analysez. Il montrera si Xdebug est installé ou non. Et il vous donnera des instructions pour terminer l'installation.

4
cmb28

Si vous utilisez Eclipse, veuillez noter que lors de l'exécution en mode XDebug, la constante magique __FILE__ sera toujours évaluée comme suit:

xdebug://debug-eval

Donc, la vérification suivante retournera true si votre session est sous XDebug:

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug
2
Eugen Mihailescu

Juste pour étendre KsaR répondre et fournir une possibilité de vérifier xdebug en ligne de commande:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"
1
goulashsoup

dans votre question, vous avez indiqué que votre phpinfo déclarait qu'Apache chargeait la configuration de xdebug dans /etc/php5/Apache2/conf.d/xdebug.ini. Dans de nombreuses instructions en ligne, vous pouvez noter qu'ils vous demandent de mettre xdebug config dans php .ini (et c'est ce que j'ai fait) CEPENDANT, si la configuration est définie sur /etc/php5/Apache2/conf.d/xdebug.ini, vous devez supprimer les paramètres de configuration [XDebug] de/etc/php5/Apache2. /php.ini et mettez-le dans /etc/php5/Apache2/conf.d/xdebug.ini INSTEAD. Une fois que j'ai supprimé de /etc/php5/Apache2/php.ini et que je mets dans /etc/php5/Apache2/conf.d/xdebug.ini à la place et que j'ai redémarré Apache, cela a fonctionné !!

Par conséquent, dans votre /etc/php5/Apache2/conf.d/xdebug.ini, mettez ce qui suit:

[XDebug]
zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/paul/tmp"

xdebug.remote_Host="localhost"
xdebug.remote_handler="dbgp";
xdebug.idekey="phpstorm_xdebug"

puis supprimez-le du fichier /etc/php5/Apache2/php.ini si vous le mettez également.

Alors fais:

Service Sudo Apache2 redémarrer

Alors ça devrait marcher !!!

1
Paul Preibisch