Хитрости при работе с xDebug в PHP

Очень трудно обойтись без отладчика xDebug в PHP при работе с большими проектами и запутанным кодом. Он может сэкономить часы рабочего времени при поиске ошибок и понимании работы кода. Однако, не эффективная работа с отладчиком может превратиться в ад и бессмысленное и беспощадное нажатие клавиш F8 и F9.

Помимо привычных брейкпоинтов xDebug умеет останавливать выполнение скрипта динамически во время исполнения при помощи функции xdebug_break(). Например, при выполнении нужного условия:

if(123 === $item->id) {
    xdebug_break();
}

В результате чего скрипт остановится на следующей строке с кодом после выполнения условия. Конечно при условии, если IDE находится в режиме приёма отладочных сообщений.

Ещё одна хитрость, можно использовать remote debug для CLI-скриптов. Для этого нужно передать несколько дополнительных параметров:

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=192.168.1.1 -dxdebug.remote_connect_back=0 script.php

Либо можно вынести эти настройки в переменные окружения:

export XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9000 remote_host=192.168.1.38 remote_connect_back=0"
export PHP_IDE_CONFIG="serverName=SomeName"
export XDEBUG_CONFIG="idekey=PHPSTORM"