2009-08-10 5 views
2

En python, on peut tracer toutes les instructions qui sont exécutées par un script de ligne de commande en utilisant le module trace. En bash, vous pouvez faire la même chose avec set -x. Nous avons un script PHP que nous exécutons depuis la ligne de commande, comme un script normal bash/python/perl/etc. Rien web-y ne se passe.PHP - Imprimer toutes les instructions qui sont exécutées dans un script de ligne de commande PHP?

Est-il possible d'obtenir une trace de toutes les lignes de code en cours d'exécution?

Répondre

1

Pas en PHP pur, non - autant que je sache.

Mais vous pouvez utiliser un débogueur; une belle façon de le faire est avec

  • L'extension Xdebug, qui peut être utilisé comme debugger
  • et certains IDE graphique qui intègre des outils de débogage, comme Eclipse PDT

Ces deux sont gratuit, btw.

Avec ceux-ci, vous pouvez le faire étape par étape, mis en place des points d'arrêt, regarder le contenu des variables, vue traces de la pile, ... Et cela fonctionne aussi bien pour les scripts Web et CLI ;-)

Bien sûr, cela signifie qu'Eclipse fonctionne sur la machine sur laquelle vous exécutez votre script ... Mais si vous l'exécutez sur votre machine de développement, vous avez probablement une interface graphique et tout ça, alors ça devrait aller ...
(Je sais que, pour les applications Web, Eclipse peut être exécuté sur une autre machine que celle avec le serveur web PHP - ne sait pas si c'est possible en CLI, cependant)


En guise de remarque: peut-être pouvez-vous intégrer Xdebug avec un débogueur basé sur CLI; Pour plus d'informations sur la liste des outils pris en charge, reportez-vous à la page à laquelle je me suis connecté précédemment.

+0

J'ai trouvé que l'une des meilleures façons d'utiliser xdebug était d'analyser simplement les fichiers de trace qu'il recrache. Vous pouvez lancer des diffs, les analyser avec perl, etc. Si vous avez deux cas d'utilisation similaires, et que l'un fonctionne et l'autre non, un diff peut être utile pour montrer où ils commencent à diverger. J'ai trouvé que 'vimdiff' (qui est un mode de fonctionnement intégré de l'éditeur' vim' omniprésent) était assez capable à cet égard, capable de traiter des fichiers très volumineux (par exemple une installation de Drupal chargée de modules) sans reculer. – intuited

+0

Il est également tout à fait possible d'utiliser xdebug en mode CLI pur. Vous pouvez le configurer pour faire des traces sur le code php invoqué depuis la ligne de commande, et en fait vous pouvez accrocher vim en tant que débogueur. Je suppose que ce n'est pas du cli pur, puisque vim court dans les malédictions. Quoi qu'il en soit, il y a des informations sur l'utilisation de vim en tant que débogueur PHP ici: http://tech.blog.box.net/2007/06/20/how-to-debug-php-with-vim-and-xdebug-on-linux/# comment-39681 – intuited

+0

Err whoops, réalisé que vous parliez de faire * à distance * déboguer avec cli. Je n'ai pas essayé de le faire, mais je pense qu'il serait possible de * déboguer * à distance, mais il faudrait que vous utilisiez ssh pour lancer la commande. – intuited

-1

Je suis un peu aveugle ici mais je suppose que l'une des façons de le faire est d'écrire tout le code pertinent dans les fonctions personnalisées et d'appeler le debug_backtrace(). debug_print_backtrace peut également être utile.

J'espère que ça aide.

+0

Oui c'est une option, mais je cherchais quelque chose de plus haut niveau que «beaucoup de statues d'impression» – Rory

2

Il existe une extension PECL, apd, qui génère un fichier de trace.

Questions connexes