Любой PHP-разработчик рано или поздно сталкивается с ситуацией, когда простого var_dump() уже недостаточно. Код становится сложнее, появляются вложенные вызовы функций, исключения, асинхронные процессы, очереди и API. Поиск ошибок начинает занимать больше времени, чем написание самого кода.

Именно для решения этой проблемы существует Xdebug - наиболее популярное расширение для PHP, которое предоставляет мощные инструменты для отладки, анализа производительности и исследования выполнения программы.


Xdebug - это расширение PHP, разработанное Дериком Ретансом (Derick Rethans), которое значительно расширяет возможности стандартного интерпретатора.

Основные функции:

  • Debugging (пошаговая отладка)
  • Stack Trace
  • Profiling
  • Трассировка выполнения (Tracing)

Проще говоря, Xdebug позволяет "заглянуть внутрь" исполнения PHP-кода.


Step Debugging

Самая популярная функция.

Позволяет:

  • остановить выполнение программы;
  • посмотреть все переменные;
  • изменить значения;
  • перейти внутрь функции;
  • выйти из функции;
  • выполнить следующую строку.

Stack Trace

Позволяет увидеть последовательность вызовов функций.

Например:

index.php => UserController => UserService => UserRepository => PDO

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


Profiling

Показывает:

  • какие функции работают медленно;
  • сколько памяти потребляют;
  • сколько времени занимает каждая функция.

Это незаменимый инструмент оптимизации.


Trace

Создает журнал выполнения программы.

Можно посмотреть буквально каждую вызванную функцию.

Например:

Controller::index() => UserService::find() => Repository::get() => PDO::execute()


Во время выполнения PHP интерпретатор постоянно сообщает Xdebug о происходящих событиях.

Если установлен breakpoint - он останавливает выполнение и сообщает IDE.

- Основные настройки

zend_extension=xdebug

xdebug.mode=debug
xdebug.start_with_request=yes

xdebug.client_host=127.0.0.1
xdebug.client_port=9003

Использование с Docker

xdebug.client_host=host.docker.internal

Source: Orkhan Alishov's notes