web-dev-qa-db-fra.com

Comment faire fonctionner XDebug avec PHPUnit sur la CLI?

J'ai essayé d'exécuter la commande CLI suivante:

phpunit -d xdebug.profiler_enable=on XYZTestCase.php

mais ça fonctionne comme d'habitude. Est-ce que quelqu'un peut-il me montrer la bonne direction?? THX!

Voici les paramètres XDebug: 

xdebug

xdebug support => enabled
Version => 2.1.2

Supported protocols => Revision
DBGp - Common DeBuGger Protocol => $Revision: 1.145 $

Directive => Local Value => Master Value
xdebug.auto_trace => Off => Off
xdebug.collect_assignments => Off => Off
xdebug.collect_includes => On => On
xdebug.collect_params => 0 => 0
xdebug.collect_return => Off => Off
xdebug.collect_vars => Off => Off
xdebug.default_enable => On => On
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.extended_info => On => On
xdebug.file_link_format => no value => no value
xdebug.idekey => Nam => no value
xdebug.manual_url => http://www.php.net => http://www.php.net
xdebug.max_nesting_level => 100 => 100
xdebug.overload_var_dump => On => On
xdebug.profiler_aggregate => Off => Off
xdebug.profiler_append => Off => Off
xdebug.profiler_enable => Off => Off
xdebug.profiler_enable_trigger => Off => Off
xdebug.profiler_output_dir => c:/wamp/tmp => c:/wamp/tmp
xdebug.profiler_output_name => cachegrind.out.%t.%p => cachegrind.out.%t.%p
xdebug.remote_autostart => On => On
xdebug.remote_connect_back => Off => Off
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_Host => localhost => localhost
xdebug.remote_log => no value => no value
xdebug.remote_mode => req => req
xdebug.remote_port => 9000 => 9000
xdebug.scream => Off => Off
xdebug.show_exception_trace => Off => Off
xdebug.show_local_vars => Off => Off
xdebug.show_mem_delta => Off => Off
xdebug.trace_format => 0 => 0
xdebug.trace_options => 0 => 0
xdebug.trace_output_dir => \ => \
xdebug.trace_output_name => trace.%c => trace.%c
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3
47
blacktie24

Le paramètre xdebug.profiler_enablene peut pas être modifié à l'exécution mais uniquement au début du script.

Exécuter phpunit -d foo=bar mènera simplement à l'appel de phpunit ini_set("foo", "bar"); et cela ne fonctionnera pas car la valeur ne peut pas changer à l'exécution.

Voir: xdebug.profiler_enable

Active le profileur de Xdebug qui crée des fichiers dans le répertoire de sortie du profil. Ces fichiers peuvent être lus par KCacheGrind pour visualiser vos données. Ce paramètre ne peut pas être défini dans votre script avec ini_set (). Si vous souhaitez activer le profileur de manière sélective, définissez xdebug.profiler_enable_trigger sur 1 au lieu d'utiliser ce paramètre.

Solution:

php -d xdebug.profiler_enable=on /usr/bin/phpunit XYZTestCase.php

En appliquant le paramètre directement à l'exécution PHP et non à phpunit, il sera défini avant le script démarre et devrait fonctionner.

44
edorian

J'ai passé des heures à essayer de faire en sorte que cela fonctionne. Pense que cela peut changer ma vie si!

Au départ, j’essayais de faire cela (c’est-à-dire d’exécuter phpunit) à l’intérieur d’une boîte vagabonde, mais j’ai réalisé qu’il était plus facile (et plus rapide en termes de performances) de l’exécuter en dehors de la boîte vagabonde. 

Tout d’abord, j’ai utilisé brew install php55 php55-xdebugen utilisant un homebrew sur un Mac (mais votre configuration peut être différente et elle devrait quand même fonctionner). Mon site est un projet symfony2.

J'essayais de suivre ceci: phpunit vagrant xdebug pour le faire fonctionner depuis une boîte vagabonde (y suis presque arrivé mais avec quelques problèmes).

Ces paramètres ont fonctionné pour moi (site en cours d'exécution à partir d'une boîte de dialogue, mais phpunit en dehors de la boîte de courrier):

#xdebug.ini (parent machine, not inside vagrant box).
[xdebug]
zend_extension="/usr/local/Cellar/php55-xdebug/2.2.6/xdebug.so" #this will be different on your machine and will probably already be set

xdebug.max_nesting_level = 250 
xdebug.default_enable = 1
xdebug.idekey = "PHPSTORM" #seems to work without this too
xdebug.remote_enable = 1

Puis lancer ceci en ligne de commande (ici, j'utilise un téléchargement de phpunit au lieu de celui lié à/usr/local/bin (qui ne semble pas fonctionner))

XDEBUG_CONFIG="idekey=PHPSTORM" bin/phpunit -c app

Ou vous pouvez créer un fichier appelé phpunit-debug (pour stocker la variable d’environnement XDEBUG_CONFIG) comme indiqué ici: phpunit xdebug

8
timhc22

Avez-vous essayé de:

  1. Réglez votre xdebug.idekey dans votre php.ini sur tout ce que vous voulez (par exemple: Blacktie)
  2. redémarrez votre serveur

  3. Appelez votre script en ajoutant -d xdebug.idekey = blacktie

    phpunit -d xdebug.profiler_enable = on -d xdebug.idekey = blacktie XYZTestCase.php

J'espère que cette aide.

4
David Jacquel

Le nom correct du paramètre est xdebug.profiler_enable avec un trait de soulignement. Changez votre commande en ceci:

phpunit -d xdebug.profiler_enable=on XYZTestCase.php
2
David Harkness

Vous pouvez exécuter Xdebug à partir de la ligne de commande en définissant au préalable une variable d’environnement, par exemple:

export XDEBUG_CONFIG="idekey=YOUR_IDE_KEY remote_Host=localhost remote_enable=1"

Cela a fonctionné pour moi.

Plus d'informations sur la documentation Xdebug .

2
Salvatore Zappalà

En supposant que Xdebug fonctionne déjà à partir de votre débogueur éditeur/autonome lorsqu'il est déclenché par des variables cookie/post/get, ajoutez un script Shell pour effectuer le même déclenchement.

Créer ~/bin/php-cli-debug.sh:

#!/bin/bash
phpfile="$1"
idekey=YOUR_IDE_KEY
shift 1
php -d'xdebug.remote_enable=1' -d'xdebug.remote_autostart=1' -d'xdebug.idekey='"$idekey" -f "$phpfile" -- "$@"

Ensuite, pour déboguer des éléments sur la CLI, utilisez quelque chose comme:

$ php-cli-debug.sh "$(which phpunit)" --bootstrap tests/bootstrap.php tests/FooBarTest | less -S

Assurez-vous que votre .bashrc a ajouté ~/bin à votre $PATH.

0
Walf

Tout d'abord, mon environnement:

  • WampServer Version 3.1.3 64bit
  • Apache 2.4.33 - PHP 7.1.16
  • MySQL 5.7.21
  • MariaDB 10.2.14

php.ini:

[xdebug]
zend_extension ="c:/wamp64/bin/php/php7.1.16/zend_ext/php_xdebug-2.6.0-7.1-vc14-x86_64.dll"

xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="c:/wamp64/tmp"
xdebug.show_local_vars=0
xdebug.idekey = "PHPSTORM" #seems to work without this too

phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>

J'ai fait une configuration de test sur phpstorm comme ceci:  Click the button in the red circle  Configuration Panel

Après la configuration de l'exécution, la commande ci-dessous a été exécutée lorsque j'ai cliqué sur le bouton de débogage dans PHPSTORM.

C:\wamp64\bin\php\php7.1.16\php.exe
-dzend_extension=C:\wamp64\bin\php\php7.1.16\zend_ext\php_xdebug-2.6.0-7.1-vc14-x86_64.dll
-dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=127.0.0.1 C:/wamp64/www/<PROJECT_FOLDER>/vendor/phpunit/phpunit/phpunit --bootstrap C:\wamp64\www\<PROJECT_FOLDER>\vendor\autoload.php --configuration C:\wamp64\www\<PROJECT_FOLDER>\phpunit.xml --teamcity

Veuillez remarquer le --teamcity. Je n'en ai aucune idée :) Aussi remarquez les barres obliques.

J'espère que cela aide tout le monde.

0
aod