Jak uruchomić profiler XDebug dla skryptu PHP w wierszu poleceń?

194

XDebug oferuje dyrektywę konfiguracyjną „xdebug.profiler_enable_trigger”, która pozwala aktywować profilowanie poprzez przekazanie parametru GET lub POST „XDEBUG_PROFILE” podczas wywoływania skryptu przez HTTP. Jest to przydatne, jeśli nie chcesz profilować WSZYSTKICH swoich skryptów, ale tylko w kilku szczególnych przypadkach bez zmiany konfiguracji PHP.

Czy istnieje sposób na osiągnięcie tego samego zachowania dla programów PHP z linii poleceń? Próbowałem przekazać „XDEBUG_PROFILE” jako argument wiersza poleceń, ale to nie zadziałało.

Ogólnie rzecz biorąc, profilowanie PHP w wierszu poleceń działa dobrze, ale chciałbym mieć taką samą elastyczność dla połączeń jak w przeglądarce i serwerze HTTP.

Jakieś sugestie?

selfawaresoup
źródło
Przepraszam, próbuję tego, ale nie rozumiem. Co powinno być w parametrze „XDEBUG_PROFILE”?
Andresch Serj
Nie ma znaczenia, co jest w parametrze, o ile w ogóle jest obecny.
selfawaresoup
Brak wsparcia dla zmiennej środowiskowej XDEBUG_PROFILE to błąd 413 w narzędziu do śledzenia błędów XDebug.
poza

Odpowiedzi:

257

Można przekazać ustawienia INI z -dflag php -d xdebug.profiler_enable=On script.php.

jou
źródło
39
Na systemach * nix podstawie, można zrobić to nieco łatwiejsze do wykorzystania przez stworzenie aliasu, takich jak: alias phpp="php -d xdebug.profiler_enable=1". W ten sposób, gdy nie chcesz profilować, po prostu używaj phpi kiedy używasz phpp.
JC Yamokoski
14
Musiałem określić, który katalog Chciałem wyjście profiler być zapisany jako dobrze, więc to dla mnie woked: alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". To zawsze przechowuje dane wyjściowe debugowania w bieżącym katalogu roboczym.
Lars Nyström
tak, jestem pod Eclipse i XAMPP w środowisku Win7. To działa.
gouchaoer
4
W systemie Windows możesz utworzyć w swojej ŚCIEŻCE phpp.cmdplik, zawierający php -d xdebug.profiler_enable=On %*wtedy możesz po prostu uruchomić phpp <args>.
Gras Double
43

Mam to działa na Ubuntu / Netbeans przez:

  • kopiowanie linii konfiguracyjnych xdebug z pliku /etc/php5/apache2/php.ini do /etc/php5/cli/php.ini
  • ustawienie zmiennej środowiskowej o nazwie sesji debugowania (możesz to pobrać z ciągu zapytania w adresie URL strony uruchamianej przez netbeans po uruchomieniu debugowania) komenda to: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Potem jest to po prostu przypadek rozpoczęcia debugowania w netbeans i zrobienia „php myscript.php” w linii poleceń.

Andrew Hancox
źródło
2
Uwaga: jeśli skończysz, jeśli chcesz, aby debugger nadal nasłuchiwał, a nie uruchamiał go poleceniem PHP, możesz po prostu użyć: „unset XDEBUG_CONFIG”.
Dan LaManna
To faktycznie działa dla mnie, a powyższa odpowiedź nie brzmi ;-)
Jonathan Liuti
4
Chodzi o debugowanie (przechodzenie przez skrypt). Pytanie dotyczyło profilowania (analiza wydajności skryptu, jakie funkcje zajmują dużo czasu itp.)
Matthew Flaschen
32

z PhpStorm na zdalnym serwerze WWW używam tego polecenia:

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

gdzie server_nameoznacza nazwę serwera w konfiguracji projektu PhpStorm

oliver nadj
źródło
5
dodałem to do .bash_aliases alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=echo $ SSH_CLIENT | cut -d \ "= \" -f 2 | awk „{print $ 1}”, "więc kiedy chcę debugować, używam xphp zamiast php
oliver nadj
18

Jak opisano na stronie zdalnego debugowania Xdebug , profilowanie można również włączyć za pomocą XDEBUG_CONFIGzmiennej środowiskowej, włączając dyrektywę „profile_enable = 1”:

XDEBUG_CONFIG="profiler_enable=1" php ...
outis
źródło
To powinna być zaakceptowana odpowiedź, ponieważ jest to najbardziej dostępna metoda. Plik binarny PHP może być zapakowany, może być ustawiony jako interpreter #! / X / php w miejscach, których nie chcesz dotykać. Za pomocą zmiennej env można ją selektywnie włączyć
Jan
11

Podobny, ale inny proces pozwalający na pracę z Netbeans podczas programowania na maszynie wirtualnej.

Musisz przekazać flagę włączonego zdalnego, flagę automatycznego uruchamiania, flagę ide i nazwę zdalnego hosta.

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
Joshua Dance
źródło
4

Utworzyłem skrypt powłoki do obsługi debugowania klienta.

nazwa skryptu: phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

Umieściłem ten skrypt w /usr/bin i nadałem mu uprawnienia do wykonywania.

Skrypt pobiera argumenty przekazane do phpdebug i wywołuje php z argumentami xdebug i dołącza argumenty przekazane do skryptu powłoki, $ * na końcu.

użytkownik2970583
źródło
Tak, w moim przypadku wszystko, czego potrzebowałem, to dodanie ustawienia INI dla mojego zdalnego hosta. To wszystko, co było potrzebne do debugowania w moim IDE z komendy CLI PHP.
Spencer Williams
Właściwie musiałem również ustawić XDEBUG_CONFIGzmienną środowiskową. Właśnie to i xdebug.remote_hostustawienie sprawiło, że działało.
Spencer Williams
2

W PhpStorm 7 za pomocą WAMP dostałem to do pracy, kopiując moje już działające ustawienia xdebug z C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini do sekcji xdebug w C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Następnie uruchomiłem skrypt w następujący sposób:

php -d xdebug.idekey=PHPSTORM script.php

Działa to nawet do debugowania skryptów rzemieślniczych laravel

php -d xdebug.idekey=PHPSTORM artisan db:seed --force
Chukky Nze
źródło
0

Dokumentacja od Jetbrains

Aby rozpocząć skrypt od debugowania za pomocą przełączników wiersza polecenia PHP Ustaw zmienną środowiskową, która poinformuje XDebug o połączeniu się z IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Tutaj idekey powinien mieć wartość losową.

Uruchom PHP z następującymi opcjami wiersza poleceń:

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php

Możesz użyć 10.0.2.2 zamiast 127.0.0.1 z Vagrant (patrz powiązane pytanie SO).

adm1n
źródło