it-swarm.com.de

Wie kann ich XDebug mit PHPUnit auf der CLI ausführen lassen?

Ich habe versucht, den folgenden CLI-Befehl auszuführen:

phpunit -d xdebug.profiler_enable=on XYZTestCase.php

aber es läuft ganz normal. Kann mir jemand die richtige Richtung zeigen? Vielen Dank!

Hier sind die XDebug-Einstellungen: 

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

Die xdebug.profiler_enable-Einstellung kann nicht zur Laufzeit geändert werden, sondern nur beim Start des Skripts.

Das Ausführen von phpunit -d foo=bar führt nur dazu, dass phpunit ini_set("foo", "bar"); aufruft. Dies funktioniert nicht, da sich der Wert zur Laufzeit nicht ändern kann.

Siehe: xdebug.profiler_enable

Aktiviert den Xdebug-Profiler, der Dateien im Profilausgabeverzeichnis erstellt. Diese Dateien können von KCacheGrind gelesen werden, um Ihre Daten zu visualisieren. Diese Einstellung kann nicht mit ini_set () in Ihrem Skript festgelegt werden. Wenn Sie den Profiler selektiv aktivieren möchten, setzen Sie xdebug.profiler_enable_trigger auf 1, anstatt diese Einstellung zu verwenden.

Lösung:

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

Wenn Sie die Einstellung direkt auf die Laufzeitumgebung PHP anwenden und nicht auf phpunit, wird gesetzt, bevor das Skript gestartet wird und funktionieren sollte.

44
edorian

Ich habe viele Jahre damit verbracht, dies zu versuchen. Denke, das könnte mein Leben verändern!

Ursprünglich versuchte ich, dies in einer Vagrant-Box zu tun (d. H. Phpunit auszuführen), stellte jedoch fest, dass es einfacher (und schneller) war, es außerhalb der Vagrant-Box auszuführen. 

Zuerst habe ich brew install php55 php55-xdebug mit Homebrew auf einem Mac verwendet (aber Ihre Konfiguration kann anders sein und sollte trotzdem funktionieren). Meine Website ist ein symfony2-Projekt.

Ich habe versucht, dies zu befolgen: phpunit vagrant xdebug um es aus einer Vagabox herauszuarbeiten (fast da, aber mit einigen Problemen).

Diese Einstellungen funktionierten für mich (Laufen von einer Vagrant-Box, aber Phpunit außerhalb der Vagrant-Box):

#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

Dann führe ich dies in der Kommandozeile aus (hier verwende ich einen Download von phpunit anstelle des mit/usr/local/bin verknüpften) (was anscheinend nicht funktioniert)

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

Oder Sie können eine Datei namens phpunit-debug (zum Speichern der Umgebungsvariablen XDEBUG_CONFIG) erstellen, wie hier beschrieben: phpunit xdebug

8
timhc22

Haben Sie versucht,

  1. Setzen Sie Ihre xdebug.idekey in Ihrer php.ini auf den gewünschten Wert (zB: Blacktie)
  2. starten Sie Ihren Server neu

  3. Rufen Sie Ihr Skript auf, indem Sie -d xdebug.idekey = blacktie hinzufügen.

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

Hoffe das hilft.

4
David Jacquel

Der korrekte Name der Einstellung lautet xdebug.profiler_enable mit einem Unterstrich. Ändern Sie Ihren Befehl so:

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

Sie können Xdebug von der Befehlszeile aus ausführen, indem Sie zuvor eine Umgebungsvariable festlegen, z.

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

Das hat bei mir funktioniert.

Weitere Informationen zur Xdebug-Dokumentation .

2

Ein Windows mit phpStorm

Geben Sie dies in die Befehlszeile ein:

set XDEBUG_CONFIG="idekey=PHPSTORM"

Dies fügt eine Umgebungsvariable hinzu, nach der phpStorm Ausschau hält.

Angenommen, Sie haben Xdebug bereits in Ihrem Editor/Standalone-Debugger ausgeführt, wenn er durch Cookie-/Post-/Get-Variablen ausgelöst wird, fügen Sie ein Shell-Skript hinzu, um dieselbe Auslösung zu erreichen.

~/bin/php-cli-debug.sh erstellen:

#!/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" -- "[email protected]"

Zum Debuggen von Dingen auf der CLI verwenden Sie beispielsweise Folgendes:

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

Stellen Sie sicher, dass Ihr .bashrc~/bin zu Ihrem $PATH hinzugefügt hat.

0
Walf

Zuerst meine Umgebung:

  • 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>

Ich habe eine Testlaufkonfiguration für phpstorm wie folgt vorgenommen:  Click the button in the red circle  Configuration Panel

Nachdem ich die Laufkonfiguration vorgenommen hatte, wurde der folgende Befehl ausgeführt, als ich in PHPSTORM auf die Schaltfläche "Debug" klickte.

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

Bitte beachte den --teamcity. Ich habe keine Ahnung davon :) Auch beachte die Schrägstriche vor und zurück.

Ich hoffe das hilft allen.

0
aod