Как запустить профилировщик XDebug для PHP-скрипта командной строки?

XDebug предлагает конфигурационную директиву xdebug.profiler_enable_trigger, которая позволяет активировать профилирование, передавая параметр GET или POST XDEBUG_PROFILE при вызове скрипта через HTTP. Это удобно, если вы не хотите профилировать ВСЕ ваши скрипты, а только для нескольких особых случаев, не всегда меняя конфигурацию PHP.

Есть ли способ добиться такого же поведения для программ PHP командной строки? Я попытался передать XDEBUG_PROFILE в качестве аргумента командной строки, но это не сработало.

В общем, профилирование командной строки PHP работает хорошо, но я хотел бы иметь такую ​​же гибкость для каждого вызова, что и в браузере и HTTP-сервере.


person selfawaresoup    schedule 18.02.2010    source источник
comment
Извините, я тоже пытаюсь это сделать, но не понимаю. Что должно быть в параметре XDEBUG_PROFILE?   -  person Andresch Serj    schedule 11.10.2011
comment
Неважно, что находится в параметре, если он вообще присутствует.   -  person selfawaresoup    schedule 04.11.2011
comment
Отсутствие поддержки для переменной среды XDEBUG_PROFILE является ошибкой 413 в системе отслеживания ошибок XDebug. .   -  person outis    schedule 06.10.2013


Ответы (10)


Вы можете передать настройки INI с помощью флага -d: php -d xdebug.profiler_enable=On script.php.

person jou    schedule 18.02.2010
comment
В системах на основе * nix это можно немного упростить, создав псевдоним, например: alias phpp="php -d xdebug.profiler_enable=1". Таким образом, когда вы не хотите профилировать, просто используйте php, а когда вы используете phpp. - person J.C. Yamokoski; 29.11.2012
comment
Мне пришлось указать, в каком каталоге я хотел бы сохранить выходные данные профилировщика, поэтому меня это разбудило: alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Это всегда сохраняет вывод отладки в вашем текущем рабочем каталоге. - person Lars Nyström; 14.06.2015
comment
да, я использую Eclipse и XAMPP в среде Win7. Оно работает. - person gouchaoer; 27.12.2015
comment
В Windows вы можете создать в своем каталоге PATH phpp.cmd файл, содержащий php -d xdebug.profiler_enable=On %*, тогда вы можете просто запустить phpp <args>. - person Gras Double; 14.10.2016
comment
Вы также можете добавить свои параметры в команду Shebang в файле типа #!/usr/bin/php -d xdebug.start_with_request=On - person Steve Kirsch; 01.05.2021

Я получил это, работая над Ubuntu / Netbeans:

  • копирование строк конфигурации xdebug из файла /etc/php5/apache2/php.ini в /etc/php5/cli/php.ini
  • установка переменной среды с именем сеанса отладки (вы можете получить это из строки запроса в URL-адресе страницы, запускаемой netbeans при запуске отладки) команда: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Тогда это просто случай запуска отладки в netbeans и выполнения "php myscript.php" в командной строке.

person Andrew Hancox    schedule 17.08.2011
comment
Примечание. После того, как вы закончите, если вы хотите, чтобы ваш отладчик прослушивал и не запускал его с помощью команды PHP, вы можете просто использовать: unset XDEBUG_CONFIG. - person Dan LaManna; 16.01.2012
comment
Это действительно работает для меня, а ответ выше - нет ;-) - person Jonathan Liuti; 19.01.2012
comment
Речь идет об отладке (пошаговом выполнении сценария). Речь шла о профилировании (анализ производительности скрипта, какие функции занимают много времени и т. Д.) - person Matthew Flaschen; 05.03.2016
comment
На WSL у меня сработала настройка xdebug в /etc/php/<version>/cli/php.ini. - person passerby; 12.04.2021

с PhpStorm на удаленном веб-сервере я использую эту команду:

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

где server_name - имя сервера в конфигурации проекта PhpStorm.

person oliver nadj    schedule 21.11.2013
comment
я добавил это в .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 | вырезать -d \ = \ -f 2 | awk '{print $ 1}' _ 2_ поэтому, когда я хочу отладить, я использую xphp вместо php - person oliver nadj; 01.08.2014

Как описано на странице Удаленная отладка Xdebug, профилирование также можно включить с помощью переменной среды XDEBUG_CONFIG, добавив profile_enable = 1 директива:

XDEBUG_CONFIG="profiler_enable=1" php ...

Для простоты использования указанную выше командную строку можно записать как псевдоним:

alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'

Псевдоним можно добавить в один из (интерактивных) сценариев запуска вашей оболочки, например ~/.bash_aliases или ~/.bashrc (в зависимости от вашей системы).

person outis    schedule 28.08.2013
comment
Это должен быть принятый ответ, так как это наиболее доступный метод. Бинарный файл PHP может быть обернут, он может быть установлен как интерпретатор #! / X / php в местах, к которым вы не хотите прикасаться. С помощью переменной env его можно выборочно включить - person John; 20.12.2019

Аналогичный, но другой процесс для его работы с Netbeans при разработке на виртуальной машине.

Необходимо передать флаг удаленного включения, флаг автоматического запуска, флаг ide и имя вашего удаленного хоста.

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
person Joshua Dance    schedule 01.07.2014

Я создал сценарий оболочки для обработки отладки клиента.

имя скрипта: phpdebug

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

Я поместил этот сценарий в /usr/bin и дал ему права на выполнение.

Сценарий принимает аргументы, переданные в phpdebug, вызывает php с аргументами xdebug и добавляет аргументы, переданные в сценарий оболочки, $ * в конце.

person user2970583    schedule 16.07.2015
comment
Да, в любом случае в моем случае все, что мне нужно, это добавить настройку INI для моего удаленного хоста. Это было все, что требовалось для отладки в моей среде IDE с помощью команды PHP CLI. - person Spencer Williams; 13.09.2017
comment
На самом деле мне также нужно было установить переменную среды XDEBUG_CONFIG. Только это и параметр xdebug.remote_host заставили его работать. - person Spencer Williams; 14.09.2017

В PhpStorm 7 с использованием WAMP я заставил это работать, скопировав мои уже работающие настройки xdebug из C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini в раздел xdebug в C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Затем я запустил свой сценарий так:

php -d xdebug.idekey=PHPSTORM script.php

Это даже работало для отладки скриптов laravel artisan.

php -d xdebug.idekey=PHPSTORM artisan db:seed --force
person Chukky Nze    schedule 25.07.2014

Для Xdebug 3

Теперь включение Xdebug для одного скрипта можно легко выполнить с помощью XDEBUG_MODE переменной среды:

XDEBUG_MODE=profile php script_to_be_profiled.php
person yivi    schedule 13.04.2021

Документация от Jetbrains

Чтобы запустить сценарий с отладкой с помощью переключателей командной строки PHP Задайте переменную среды, которая сообщит XDebug подключиться к IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Здесь у идекей должно быть случайное значение.

Запустите PHP со следующими параметрами командной строки:

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

Вы можете использовать 10.0.2.2 вместо 127.0.0.1 с Vagrant (см. Соответствующий вопрос SO).

person adm1n    schedule 01.02.2019

Добро пожаловать в xdebug 3!

Сейчас:

xdebug.mode=profile

следовательно:

php -d xdebug.mode=profile script.php
person Fabian Blechschmidt    schedule 26.06.2021