Как мне заставить xdebug / step-debugging работать с ddev?

Я работал с ddev над своими проектами Drupal и теперь хочу использовать xdebug, поэтому у меня есть пошаговая отладка с помощью PhpStorm (или вообще любая IDE была бы в порядке). Но я не могу заставить его останавливаться на точках останова. Я пытался следовать инструкции в ddev docs, но это меня не помогает, и я не знаю, что делать дальше. Я сделал:

  • Установите IP-адрес 172.28.99.99, как описано там.
  • Включил xdebug с помощью config.yaml xdebug_enabled: true и ddev start (и проверил с помощью phpinfo, чтобы убедиться, что xdebug включен).
  • Переведите PHPStorm в режим "прослушивания отладочных подключений"

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

LazyOne 06.04.2018 10:33
PHPStorm vs Visual Studio Code: Выбор лучшей IDE для ваших потребностей в веб-разработке
PHPStorm vs Visual Studio Code: Выбор лучшей IDE для ваших потребностей в веб-разработке
PHPStorm и Visual Studio Code - две популярные интегрированные среды разработки (IDE), используемые веб-разработчиками. Оба инструмента предлагают...
3
1
2 279
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Отладка xdebug в любой настройке может быть небольшой проблемой, но вот шаги, которые необходимо предпринять:

  • Сначала перечитайте документы.
  • Убедитесь, что у вас установлена ​​версия PHPStorm 2019+. Многие версии PHPStorm до 2018.3 и (включая?) Были несовместимы с более новыми версиями XDebug.
  • Убедитесь, что xdebug включен; по умолчанию он отключен из соображений производительности. Большинство людей используют ddev exec enable_xdebug, чтобы включить его, когда они этого хотят, и ddev exec disable_xdebug, когда они с ним закончили, но его также можно включить в .ddev/config.yaml.
  • Не думайте, что выполняется какой-то непонятный фрагмент кода, и не ставьте там точку останова. Начните с установки точки останова в первой исполняемой строке в вашем index.php. О, как часто люди думают, что это должно быть остановлено, но их код не выполняется.
  • ddev ssh в веб-контейнер. Сможете ли вы ping host.docker.internal (и получить ответы)? Если вы не можете этого сделать, возможно, у вас слишком агрессивный брандмауэр.
  • В PHPStorm отключите кнопку «прослушивать соединения», чтобы она не слушала. Или просто выйдите из PHPStorm.
  • ddev ssh: Может ли telnet host.docker.internal 9000 подключиться? Если это так, у вас есть что-то еще, работающее на порту 9000, возможно, php-fpm. Используйте lsof -i :9000 -sTCP:LISTEN, чтобы узнать, что там, и остановить это, или измените порт xdebug и настройте PHPStorm для использования нового. Не продолжайте, пока ваша команда telnet не подключится.
  • Теперь нажмите кнопку прослушивания на PHPStorm, чтобы запустить прослушивание соединений.
  • ddev ssh и попробуйте снова telnet host.docker.internal 9000. Он должен подключиться. Если нет, возможно, PHPStorm не прослушивает или не настроен для прослушивания порта 9000?
  • Убедитесь, что Xdebug включен. Вы можете использовать php -i | grep grep Xdebug внутри контейнера или использовать любой другой метод, который вы хотите, который дает вывод phpinfo(), включая Drupal admin / reports / status / php. Вы должны увидеть with Xdebug v2.9.6, Copyright (c) 2002-2020, а php -i | grep "xdebug.remote_enable" должен дать вам xdebug.remote_enable: On.
  • Установите точку останова в первой соответствующей строке index.php вашего проекта, а затем посетите сайт в браузере. На этом следует остановиться.

Примечание от @heddn: если вы хотите, чтобы xdebug работал только для fpm, например, phpenmod -s fpm xdebug, вместо запуска enable_xdebug.

Примечание от @mfrieling: если вы используете расширение браузера, такое как XDebug Helper, которое устанавливает ключ IDE, он должен быть таким же, как на сервере. Начиная с DDEV 1.10.0, "внутри контейнеров web и db создан реальный пользователь с вашим именем пользователя и идентификатором пользователя", который также используется как ключ IDE по умолчанию. Используемый ключ IDE должен совпадать с сервером, расширением браузера / отправленным файлом cookie и PHPStorm. Вы можете изменить ключ IDE в DDEV, создав файл .ddev/php/xdebug.ini со следующими двумя строками (замените PHPSTORM на значение, которое вы хотите использовать:

[XDebug]
xdebug.idekey = PHPSTORM

Мы будем рады видеть вас здесь!

Отличная поломка для отладки! Я выполнил все шаги и все еще имел проблемы, оказалось, что xdebug еще не работает должным образом на php 7.3, поэтому я уменьшил свою конфигурацию ddev до 7.2, и она сработала OOTB! Думал, что нужно где-то задокументировать: P

Yan Loetzer 02.05.2019 09:41

Спасибо за отличные шаги по отладке. В моем случае шаг с ping host.docker.internal не удался, и решением был не чрезмерно агрессивный брандмауэр, а вот это: github.com/docker/for-mac/issues/2965#issuecomment-574832076 Использование Mac с последними версиями Docker для Mac, DDEV и PhpStorm.

Rotem 26.03.2021 18:56

Спасибо, возникла та же проблема, и добавление файла .ddev/docker-compose.xdebug.yaml устранило проблему.

Однако я работаю на Mac / OSX и обнаружил, что эти дополнительные шаги сработали для обнаружения IP-адреса внутреннего хоста изнутри контейнера:

1.) Войдите в веб-континент ddev ssh

2.) Запускаем ping docker.for.mac.localhost

3.) Установите возвращаемый IP-адрес для host.docker.internal в приведенном выше файле yaml.

4.) Снимаем и запускаем DDEV.

Также стоит упомянуть, что проверка xdebug в PHPStorm полезен для проверки конфигурации.

Docker.for.mac.localhost должен быть таким же, как host.docker.internal, это старый способ предоставления Docker этого адреса. Вам не следовало делать что-либо из этого в текущих версиях Docker для Mac и ddev.

rfay 16.06.2018 15:46

Другие вопросы по теме