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.