xDebug — отличный отладчик, но он существенно замедляет сайты. Во время разработки, желательно включать xDebug только тогда, когда он действительно нужен. Давайте посмотрим, как включить, отключить xDebug и установить режимы профилирования в среде разработки Laragon. Также увидим, как добавить кнопки этих действий на панель инструментов phpStorm.
Так будет выглядеть конечный результат (4 крайние кнопки справа).
Вначале давайте создадим командный файл для переключения xDebug. Предполагается, что мы работаем под Wondows 10 с установленной оболочкой Linux Bash. В некой папке, которая находится в PATH Windows, создадим два файла: xdebug.bat и xdebug.sh.
xdebug.bat:
@echo off bash xdebug.sh %*
xdebug.sh:
#!/bin/bash #set -v ini_file="/mnt/c/laragon/bin/php/php-7.2.10/php.ini" if [ -z $1 ] then if grep -q '^extension=blackfire' "$ini_file" then echo 'xdebug is BLACKFIRE' exit 0 fi if grep -q ';zend_extension' "$ini_file" then echo 'xdebug is OFF' exit 0 fi if grep -q 'xdebug.profiler_enable=0' "$ini_file" then echo 'xdebug is ON' exit 0 else echo 'xdebug is PROFILER' exit 0 fi fi if [ 'on' = $1 ] then sed -i s/^;zend_extension=php_xdebug/zend_extension=php_xdebug/g $ini_file sed -i s/^xdebug.profiler_enable=1/xdebug.profiler_enable=0/g $ini_file sed -i s/^extension=blackfire/;extension=blackfire/g $ini_file pid=$(pgrep blackfire-agent) if [ ! -z $pid ] then kill $pid fi /mnt/c/laragon/laragon.exe reload apache exit 0 fi if [ 'profiler' = $1 ] then sed -i s/^;zend_extension=php_xdebug/zend_extension=php_xdebug/g $ini_file sed -i s/^xdebug.profiler_enable=0/xdebug.profiler_enable=1/g $ini_file sed -i s/^extension=blackfire/;extension=blackfire/g $ini_file pid=$(pgrep blackfire-agent) if [ ! -z $pid ] then kill $pid fi /mnt/c/laragon/laragon.exe reload apache exit 0 fi if [ 'off' = $1 ] then sed -i s/^zend_extension=php_xdebug/;zend_extension=php_xdebug/g $ini_file sed -i s/^xdebug.profiler_enable=1/xdebug.profiler_enable=0/g $ini_file sed -i s/^extension=blackfire/;extension=blackfire/g $ini_file pid=$(pgrep blackfire-agent) if [ ! -z $pid ] then kill $pid fi /mnt/c/laragon/laragon.exe reload apache exit 0 fi if [ 'blackfire' = $1 ] then sed -i s/^zend_extension=php_xdebug/;zend_extension=php_xdebug/g $ini_file sed -i s/^xdebug.profiler_enable=1/xdebug.profiler_enable=0/g $ini_file sed -i s/^;extension=blackfire/extension=blackfire/g $ini_file /mnt/c/laragon/laragon.exe reload apache pid=$(pgrep blackfire-agent) if [ ! -z $pid ] then kill $pid fi exec /mnt/c/Programs/Blackfire/blackfire-agent.exe exit 0 fi echo 'argument can be "on", "off", "profiler" or "blackfire" only' exit 1
Использование:
- xdebug (без аргументов) — показать текущий статус
- xdebug on — включить xDebug
- xdebug off — выключить xDebug
- xdebug profiler — включить xDebug с профайлером
- xdebug blackfire — включить Blackfire профайлер (не имеет отношения к xDebug, само собой, но я предпочёл включить его в тот же скрипт)
xdebug.bat вызывает xdebug.sh чтобы сделать следующее:
- закомментировать/раскомментировать необходимые строки в php.ini для переключения xDebug
- перезагрузить веб-сервер Apache в Laragon
- запустить/остановить агента профилирования Blackfire, если это необходимо
php.ini (чьё размещение указано в в первой строке xdebug.sh) должен содержать примерно такие строки:
[blackfire] ;extension=blackfire ; On Windows use the following configuration: ; extension=php_blackfire.dll ; Sets the socket where the agent is listening. ; Possible value can be a unix socket or a TCP address. ; Defaults to unix:///var/run/blackfire/agent.sock on Linux, ; unix:///usr/local/var/run/blackfire-agent.sock on MacOSX, ; and to tcp://127.0.0.1:8307 on Windows. ;blackfire.agent_socket = unix:///var/run/blackfire/agent.sock blackfire.agent_socket = tcp://127.0.0.1:8308 blackfire.agent_timeout = 0.25 ; Log verbosity level (4: debug, 3: info, 2: warning, 1: error) blackfire.log_level = 4 ; Log file (STDERR by default) blackfire.log_file = /tmp/blackfire.log ; Sets fine-grained configuration for Probe. ; This should be left blank in most cases. For most installs, ; the server credentials should only be set in the agent. blackfire.server_id = your-server-id ; Sets fine-grained configuration for Probe. ; This should be left blank in most cases. For most installs, ; the server credentials should only be set in the agent. blackfire.server_token = your-token [Xdebug] ;zend_extension=php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll xdebug.remote_enable=1 xdebug.remote_connect_back=On xdebug.remote_port="9001" xdebug.profiler_enable=0 xdebug.profiler_output_dir = c:laragontmp xdebug.profiler_output_name = %R_%t_cachegrind.out xdebug.show_mem_delta = 0
Вы можете опустить секцию [blackfire], если вам не нужен этот профилировщик.
С этого момента вы можете использовать команду xdebug в терминале PhpStorm. Но давайте пойдём дальше. Мы можем добавить эти команды в External Tools в PhpStorm. Откройте Settings (Ctrl+Alt+S), найдите Tools > External Tools, и добавьте несколько инструментов, как показано ниже:
Сохраните ваши настройки. Теперь новые команды доступны в меню PhpStorm Tools > External Tools, и пора добавить кнопки к панели инструментов PhpStorm. Откройте Settings (Ctrl+Alt+S), найдите Appearance & Behavior > Menus and Toolbars, и добавьте несколько кнопок, как показано ниже:
Вы можете также добавить иконки кнопок (.png, 16 x 16). Мои иконки здесь:
На этом всё. Просто кликните на соответствующую кнопку, чтобы с лёгкостью переключить режим отладки и профилирования в PhpStorm.
Источник: KAGG Design