2009-12-22 17 views
22

Je ne ai pas tout à fait compris cela. Chaque pièce de documentation que j'ai trouvée couvre comment utiliser xdebug pour déboguer des scripts s'exécutant dans Apache. J'ai besoin de déboguer un script CLI php. Ainsi, par exemple, comment transmettre la variable XDEBUG_SESSION_START pour que xdebug démarre? J'essaie spécifiquement de déboguer un shell CakePHP. Donc, si quelqu'un a un aperçu supplémentaire de ce que je serais très reconnaissant.Comment puis-je déboguer un script PHP CLI avec xdebug?

Merci.

+0

Vous pouvez également regarder ici: http: // stackoverflow.com/questions/2288612/how-to-trigger-xdebug-pour-un-php-script – selfawaresoup

Répondre

36

Il y a quelques notes à ce sujet dans Xdebug's manual, comme, par exemple (citant):

export XDEBUG_CONFIG="idekey=session_name" 
php myscript.php 

Si vous utilisez Eclipse PDT pour développer et déboguer vos scripts PHP, il n'y a pas beaucoup de différence entre Apache ou CLI: la configuration est la même, vous n'avez pas besoin de configurer un serveur web, ni d'indiquer une URL; à la place, vous devez indiquer le chemin vers l'exécutable PHP. A propos de la variable XDEBUG_SESSION_START: bien, vous lancez l'ensemble du script en "mode débogage", donc vous n'avez aucune notion de "débogage-session", dirais-je.


Par exemple, voici ce que Window > Preference > PHP > PHP executables ressemble pour moi en ce moment, et, à droite, ce que je reçois en cliquant sur le bouton Edit de la première:

http://extern.pascal-martin.fr/so/xdebug-cli/1.png     http://extern.pascal-martin.fr/so/xdebug-cli/1-edit.png

Et la fenêtre debug configurations:

http://extern.pascal-martin.fr/so/xdebug-cli/2.png

et lancement du débogage: il fonctionne:

http://extern.pascal-martin.fr/so/xdebug-cli/3.png


Hope this helps :-)

Sinon, quel problème spécifique ne rencontrez-vous?

8

Si vous utilisez bash (ou shell similaire), ce petit script peut être utile:

alias drush-debug=drd 
function drd { 
    export XDEBUG_CONFIG="idekey=cli_session" 
    export SERVER_NAME="developer.machine" 
    export SERVER_PORT="9000" 
    drush "[email protected]" 
    unset XDEBUG_CONFIG 
    unset SERVER_NAME 
    unset SERVER_PORT 
}; 

ou comme suggéré par les commentateurs ci-dessous

alias drd='XDEBUG_CONFIG="idekey=PHPSTORM" drush "[email protected]"' 

De cette façon, vous n » Je dois définir et désarmer manuellement la variable de déclenchement chaque fois que vous voulez déboguer.

+6

Cela équivaut logiquement à placer la variable d'environnement sur la même ligne que la commande dans bash, c'est-à-dire: "XDEBUG_CONFIG = 'idekey = cli_session' drush $ * ". Il n'y a pas besoin d'une fonction qui définit et désactive la variable, le shell exportera automatiquement la variable vers la commande. – Stabledog

+1

@Stabledog Cependant, si elles ne sont pas xDebug non activées, elles seront activées pour toutes les commandes drush suivantes dans le shell actuel, si je ne me trompe pas. L'idée derrière cette fonction était d'activer temporairement le débogage de la CLI PHP, mais elle a ses limites. – Plamen

+1

@Plamen utilise "drush" $ @ "' à la place. bash développera chaque argument avec des guillemets afin que 'drush-debug cc" thème registre "' fonctionnerait. Ce n'est pas l'aspect le plus intuitif de bash, mais c'est agréable à avoir. –

2

simplement mettre la section suivante à votre php.ini

[XDebug] 
xdebug.max_nesting_level = 200 
xdebug.remote_enable=1 
xdebug.remote_port=9000 
;xdebug.profiler_enable=1 
xdebug.idekey=PHPSTORM 
xdebug.remote_autostart=1 

et remplacer PHPStorm avec votre clé ide