Как добавить кнопки управления xDebug в PhpStorm?

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

Игорь Гергель

Единственный обладатель значков золотой WordPress и бронзовый WooCommerce на StackOverflow RU. WordPress Core contributor. Работал ведущим девелопером в команде WPML.

%d такие блоггеры, как: