Отладчик на стенде - подключение, точки останова, обмен и cron
Ставим на стенде пошаговый отладчик и учимся ловить им не только страницы, но и обмен с учётной системой и задания по расписанию.
Решение
Включаем отладчик на стенде:
; php.ini стенда, на боевом сайте этого быть не должноxdebug.mode=debugxdebug.client_host=127.0.0.1xdebug.client_port=9003xdebug.start_with_request=trigger; trigger означает «только по признаку в запросе», а не на каждый запрос подрядОтладчик включают только на стенде и в режиме по требованию. Постоянно включённый режим замедляет каждый запрос в разы, и первым это замечает тот, кто просто открыл каталог.
Подключаем среду разработки:
- среда разработки слушает порт, а не подключается к сайту сама- в браузере запуск помечают признаком отладки: расширение или параметр адреса- при удалённом стенде порт пробрасывают через ssh на свою машинуСоединение устанавливает сервер, а не среда разработки. Отсюда и порядок: сначала включить прослушивание в среде, потом открыть страницу, а не наоборот.
Сопоставляем пути проекта и сервера:
/home/site/public_html на сервере/Users/dev/project в проекте на своей машине// без этого соответствия точка останова ставится «в никуда» и не срабатываетПути на сервере и в проекте обязаны совпадать по соответствию. Точка останова, поставленная в файле, который отладчик не узнаёт, молча не срабатывает, и время уходит на поиск несуществующей ошибки.
Ловим обмен и задания по расписанию:
XDEBUG_TRIGGER=1 php -f /home/site/public_html/local/scripts/sync.php# для обмена с учётной системой признак ставят в запросе точки обмена# консольные скрипты отлаживают именно так: переменной окруженияОбмен и задания ловятся отдельным признаком запуска. Точка останова в обработчике обмена не сработает от открытия страницы: этот код выполняется в другом запросе, а часто и вовсе в консоли.
Отладчик не заменяет собой журнал и не отменяет нужды в его записях. Сбой, который случается раз в сутки на боевом сайте, ловится записями в журнал, а не сидением с точкой останова в ожидании.
На боевом сайте отладчик не включают даже на пять минут. Он замедляет сайт и открывает порт, по которому к процессу подключается кто угодно из сети.
Настройки отладчика стоит держать в файле стенда, а не в общем. Иначе они однажды уезжают выкладкой туда, где им совсем не место.
Типичные проблемы
Точка останова не срабатывает.
Пути на сервере и в проекте не сопоставлены между собой. Отладчик не узнаёт этот файл и молча пропускает поставленную в нём точку.
Сайт на стенде стал медленным.
Отладчик включён на каждый запрос, а не по требованию. Режим по признаку запуска возвращает обычную скорость.
Страница ловится, а обмен нет.
Обмен выполняется другим запросом или вообще в консоли. Для обмена признак отладки ставят отдельно, прямо в самом его входящем запросе.
Среда разработки не видит соединения.
Порт закрыт или занят другим процессом на этой машине. При удалённом стенде порт пробрасывают через ssh прямо на свою рабочую машину.
На боевом сайте нашёлся включённый отладчик.
Настройки уехали туда общим файлом вместе со всем остальным кодом этого проекта. Их держат в файле настроек конкретного стенда, а не в общем файле.
Частые вопросы
Можно ли отладить обмен с учётной системой?
Да, если поставить признак отладки в запросе точки обмена. Иначе обработчик выполнится без остановки.
Как отладить запрос из браузера?
Тем же признаком отладки в самом запросе. Среда разработки при этом уже должна слушать порт.
Что делать, если отладчик поставить нельзя?
Писать в свой журнал: это медленнее, но работает везде. На боевом сайте это единственный способ.
Нужен ли отладчик для правки шаблона?
Обычно нет: там хватает вывода значений на страницу. Он окупается на чужом коде и на обмене.
Смежное
- Стенд разработчика - оглавление подтемы
- Стенд из копии боевого: подъём, обезличивание, отрезанные связи - где всё это включают
- Свой журнал решения: файл, ротация, что писать - чем ловят то, что не поймать отладчиком
- Отладка на боевом сайте: журналы, режим ошибок, поиск виновника - разбор там, где отладчика нет
- Автодополнение и подсказки IDE: заглушки и аннотации - остальная обвязка рабочего места