xDebug — отличный отладчик, но он существенно замедляет сайты. Во время разработки, желательно включать xDebug только тогда, когда он действительно нужен. Давайте посмотрим, как включить, отключить xDebug и установить режимы профилирования в среде разработки Laragon. Также увидим, как добавить кнопки этих действий на панель инструментов phpStorm.
Так будет выглядеть конечный результат (4 крайние кнопки справа).
![](https://kagg.eu/wp-content/uploads/2018/11/toolbar-with-buttons.jpg)
Вначале давайте создадим командный файл для переключения 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, и добавьте несколько инструментов, как показано ниже:
![](https://kagg.eu/wp-content/uploads/2018/11/external-tools-settings.jpg)
Сохраните ваши настройки. Теперь новые команды доступны в меню PhpStorm Tools > External Tools, и пора добавить кнопки к панели инструментов PhpStorm. Откройте Settings (Ctrl+Alt+S), найдите Appearance & Behavior > Menus and Toolbars, и добавьте несколько кнопок, как показано ниже:
![](https://kagg.eu/wp-content/uploads/2018/11/toolbar-settings.jpg)
Вы можете также добавить иконки кнопок (.png, 16 x 16). Мои иконки здесь:
![](https://kagg.eu/wp-content/uploads/2018/11/debug_on.png)
![](https://kagg.eu/wp-content/uploads/2018/11/debug_off.png)
![](https://kagg.eu/wp-content/uploads/2018/11/debug_profiler.png)
![](https://kagg.eu/wp-content/uploads/2018/11/debug_blackfire.png)
На этом всё. Просто кликните на соответствующую кнопку, чтобы с лёгкостью переключить режим отладки и профилирования в PhpStorm.