xdebug

netbeans xdebug docker Настройка отладки (ubuntu linux)

Рассмотрим ситуацию, когда приложение с php запущено внутри контейнера и нам нужно отлаживать его через xdebug (инструкция проверялась для php7.4 и Netbeans11.2)

netbeans 11.2 Перестает слушать порт 9000 после оставки отладки после первого неудачного раза (xdebug)

Наблюдается такая проблема:

netbeans 11.2 Перестает слушать порт и открывать проект в браузере в последующих после первой попытка, если остановить отладку при отсутствии соединения с xdebug в первой попытке запуска

IDE приходится перезапускать, чтобы попробовать соединиться с xdebug заново, если вы что-то меняете в нем.

Если же первая попытка проходит успешно, то остановка отладки и последую запуск заново работают нормально, причем не важно - был ли первый запуск отладки в том же проекте, что и второй.

docker linux host IP хоста (Основной операционной системы), как обращаться к службам "снаружи"

Используем сеть по умолчанию (минимализм)

Cпециальное внутреннее доменное имя host.docker.internal что обращаться к основной системе (хосту) из контейра (гостевой системы) не работает в Linux (как минимум в docker 19)

Явное указание IP

Более сложный способ: можно сконфигурировать подсеть для контейнеров приложения, явно указав диапазон адресов подсети, сделать это можно так:

docker Запросы выполняются медленнее чем без докера

Проблема

После переезда в докер запросы стали выполняться очень долго (минимум по 3 секунды лишних на каждый вопрос). При этом докер запускался в ubuntu linux, где накладные расходны на сам докер должны быть минимальными.

Что оказалось

Оказалось, что проблема была в том, что в сборке использовалась конфигурация xdebug (в конфиге ниже это файл config/php/xdebug.ini) в которой было включен автозапуск (xdebug.remote_autostart=1), чтобы исправить ситуацию переключили на 0:

xdebug netbeans Отладка в терминале (консоли), отладка тестов

Предположим, что вы уже умеете настраивать запуск xdebug через локальный сервер.

В нашем случае хотелось посмотреть поотлаживать код, который запускался в режиме командной строки (автотесты с помощью codeception),

моя исходная команда в папке проекта была (в терминале):

netbeans port 9000 already occupied -- xdebug php Как исправить ошибку

Выяснить кем реально занят порт в линуксе можно так:

sudo lsof -i -n -P | more

В моем случае это оказался php-fpm процесс другой версии php.
Поэтому пришлось перенастроить xdebug на 10000 порт.

netbeans xdebug Отладка без указания входного скрипта (index.php) и get-параметров

Основная идея

Идея состоит в следующем:

  1. Нам надо просто запустить отладочную сессию xdebug (например просто открыв главную страницу сайта),
  2. а потом не завершая эту отладочную сессию уже браузере открыть интересующий нас url (т.е. не запускать из нетбинса, где как раз и не обойтись в данный момент без index.php и/или GET-параметров).

Реализация

Теперь сделаем все это по шагам:

waiting for connection netbeans-xdebug Использование xdebug в netbeans, зависание (оишкба, не работает). Как исправить

ПРИМЕЧАНИЕ: более актуальную версию этой заметки см. здесь.

Диагностика проблемы PHP7 и ранее

phpinfo() должно выдавать:

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_autostart=0
xdebug.remote_connect_back=0

в моём случае:

[!] XDebug по-русски. Справочник: Расширение для отладки PHP кода

Какие части есть в любой настройке

Cм. общую идею по настройке XDebug, а конкретные инструкции будут далее по тексту ;)

php xdebug Установка и настройка в Ubuntu Linux

Действуем так:

  1. Обновляем индекс пакетов:
    sudo apt update
  2. Далее ищем название пакета для вашей версии PHP:
    apt-cache search phpВерсия

    Например:

Pages

Subscribe to RSS - xdebug