web-dev-qa-db-fra.com

Déboguer des scripts php-cli avec xdebug et netbeans?

J'ai réussi à lancer une session de débogage de script php-cli à partir de IDE lui-même, mais je dois démarrer la session de débogage à partir du shell/de la ligne de commande. Ce sont des scripts de maintenance PHP plutôt complexes qui prennent beaucoup de paramètres d'entrée. Il est donc fastidieux de saisir des arguments depuis Netbeans.

Je l'ai déjà fait avec Zend studio: https://zend18.zendesk.com/hc/en-us/articles/203838096-Debugging-PHP-CLI-Scripts , mais je dois maintenant le faire fonctionner avec Netbeans.

Merci d'avance.

68
wurdalack

Je travaille sur Ubuntu/Netbeans par:

  • copier les lignes de configuration xdebug du fichier /etc/php5/Apache2/php.ini dans /etc/php5/cli/php.ini
  • définir une variable d'environnement avec le nom de la session de débogage (vous pouvez l'obtenir à partir de la chaîne de requête dans l'URL de la page lancée par netbeans lorsque vous démarrez le débogage) afin que la commande soit: export XDEBUG_CONFIG="idekey=netbeans-xdebug"

Ensuite, il suffit de démarrer le débogage dans netbeans et d’effectuer php myscript.php en ligne de commande.

Remarque: Si vous souhaitez déboguer à distance à l’aide de netbeans, vous devez utiliser le fichier de débogage sur le fichier en cours d’exécution à partir de la ligne de commande, et non pas le débogage normal.

108
Andrew Hancox

Ajoutez xdebug.remote_autostart=On à votre fichier php.ini ou ajoutez -dxdebug.remote_autostart=On en tant que paramètre à l'appel binaire PHP (php -d... script.php).

Voir http://xdebug.org/docs/remote

41
johannes

Je vais tout mettre ensemble, voici ce qui fonctionne pour moi.

file:
/etc/php5/cli/php.ini

zend_extension="/usr/lib/php5/20121212/xdebug.so" -> xdebug bin path
xdebug.remote_enable=on
xdebug.remote_Host=127.0.0.1
xdebug.remote_handler="dbgp"
xdebug.remote_mode="req"
xdebug.remote_port=9000 -> same port configured in netbeans debugging tab
xdebug.idekey="netbeans-xdebug" -> same ide configured in netbeans debuggin tab
xdebug.remote_autostart=1

alors, sans autre paramètre

php script.php

12
Darwin

J'ai eu le même problème, ma solution était la suivante:

  1. Environnement: Netbeans 8.2 sous Windows (Apache + php)
  2. En supposant que vous avez déjà configuré PHP et NetBeans pour déboguer le code À l'aide de Xdebug ( http://wiki.netbeans.org/HowToConfigureXDebug#Notes_on_Windows_Configuration )
  3. Sur netbeans, créez une nouvelle configuration (“Propriétés du projet”> “Exécuter la configuration”> “Nouveau…”
  4. Dans le nouveau jeu de configuration, ne pas ouvrir le navigateur Web («Avancé»> «Ne pas ouvrir le navigateur Web»)
  5. Activer la nouvelle configuration créée (liste déroulante dans la barre d’outils)
  6. Définir un point d'arrêt pour le débogage
  7. Débogage ouvert (CTRL + F5)
  8. Ouvrir la fenêtre du terminal (“Outils”> “Ouvrir dans le terminal”)
  9. Tapez le terminal: $ export XDEBUG_CONFIG = "idekey = netbeans-xdebug" (la valeur "netbeans-xdebug" doit coïncider avec "Outils"> "Options"> "Mise au point"> "ID de session")
  10. Tapez terminal: $ php.exe -f "C:\Apache24\htdocs\www.SiteName\ScriptName.php" - "Arg1 = x & Arg2 = y"
  11. Suivez le débogage…
2
Marco Del Corto

Vous pouvez utiliser le projet Dephpugger si vous ne voulez pas configurer xDebug pour votre IDE (je déteste les configurations).

https://github.com/tacnoman/dephpugger

Vous pouvez exécuter le débogueur dans un terminal, comme ipdb pour Python et byebug pour Ruby.

0
Renato Cassino

Assurez-vous également que vous configurez la valeur DBGP_IDEKEY, car ce n'est généralement pas idekey. Par exemple sur Linux:

export DBGP_IDEKEY="netbeans-xdebug" 
export XDEBUG_CONFIG="netbeans-xdebug=netbeans-xdebug"
0
Mike

J'ai eu le même problème, ma solution était la suivante: 

Dans Netbeans> la fenêtre du projet> cliquez avec le bouton droit sur le projet php> propriétés> Exécuter la configuration. Créer une nouvelle configuration. 

Remplissez les valeurs correctes: 

  • Exécuter en tant que "script" 
  • set interprète php
  • changer le fichier d'index dans mon cas c'était "cron/index.php".
0
Julian