Какие инструменты для отладки PHP используются
Что проверяют
Умеете ли вы отлаживать пошагово, а не только через var_dump, и понимаете ли разницу между отладкой локально и разбором проблемы на проде. Следом часто просят рассказать, как настроить Xdebug в Docker.
Как отвечать
Разложите инструменты по задачам:
- пошаговая отладка: Xdebug с
xdebug.mode=debugи PhpStorm или VS Code с расширением PHP Debug. В Xdebug 3 порт по умолчанию 9003, запуск задаётxdebug.start_with_request(yesилиtrigger), адрес IDE берётся изxdebug.client_host, в Docker обычноhost.docker.internal. Плюс path mappings между путями в контейнере и на хосте; - быстрый вывод:
dump()иdd()из Symfony VarDumper, они же есть в Laravel. Для запроса целиком: Symfony Profiler, Laravel Debugbar или Telescope; - встроенный отладчик:
phpdbg, работает без IDE, пригодится на сервере; - профилирование:
xdebug.mode=profileпишет файлы cachegrind для QCachegrind или PhpStorm. На проде Xdebug не держат, там берут сэмплирующие профилировщики с малыми накладными расходами: Blackfire, Tideways, SPX, Excimer; - прод:
display_errors=Off,log_errors=On,error_reporting=E_ALL, логи через Monolog по PSR-3 с контекстом запроса и трекер ошибок вроде Sentry, который собирает стек и частоту.
Добавьте, что часть ошибок ловится до запуска: PHPStan и Psalm находят неверные типы и вызовы несуществующих методов. А в PHP 8 многие бывшие предупреждения встроенных функций стали исключениями TypeError и ValueError, их видно в логах со стеком.
Где спотыкаются
Ограничиваются var_dump и print_r. Для простых случаев это нормально, но отсутствие опыта с точками останова и стеком вызовов интервьюер заметит сразу.
Переносят конфиг Xdebug 2 в Xdebug 3. Параметры xdebug.remote_enable и xdebug.remote_port в третьей версии заменены на xdebug.mode и xdebug.client_port, и отладчик молча не подключается.
Оставляют Xdebug включённым на проде или dd() в коммите. Первое заметно замедляет каждый запрос, второе обрывает ответ пользователю.