xDebug — отличный отладчик, но он существенно замедляет сайты. Во время разработки, желательно включать xDebug только тогда, когда он действительно нужен. Давайте посмотрим, как включить, отключить xDebug и установить режимы профилирования в среде разработки Laragon. Также увидим, как добавить кнопки этих действий на панель инструментов phpStorm.
Так будет выглядеть конечный результат (4 крайние кнопки справа).
Вначале давайте создадим командный файл для переключения xDebug. Предполагается, что мы работаем под Windows 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:\laragon\tmp
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.