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?


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.


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ń.


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


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

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

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.


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

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.