Я работал с ddev над своими проектами Drupal и теперь хочу использовать xdebug, поэтому у меня есть пошаговая отладка с помощью PhpStorm (или вообще любая IDE была бы в порядке). Но я не могу заставить его останавливаться на точках останова. Я пытался следовать инструкции в ddev docs, но это меня не помогает, и я не знаю, что делать дальше. Я сделал:
xdebug_enabled: true и ddev start (и проверил с помощью phpinfo, чтобы убедиться, что xdebug включен).
Отладка xdebug в любой настройке может быть небольшой проблемой, но вот шаги, которые необходимо предпринять:
ddev exec enable_xdebug, чтобы включить его, когда они этого хотят, и ddev exec disable_xdebug, когда они с ним закончили, но его также можно включить в .ddev/config.yaml.ddev ssh в веб-контейнер. Сможете ли вы ping host.docker.internal (и получить ответы)? Если вы не можете этого сделать, возможно, у вас слишком агрессивный брандмауэр.ddev ssh: Может ли telnet host.docker.internal 9000 подключиться? Если это так, у вас есть что-то еще, работающее на порту 9000, возможно, php-fpm. Используйте lsof -i :9000 -sTCP:LISTEN, чтобы узнать, что там, и остановить это, или измените порт xdebug и настройте PHPStorm для использования нового. Не продолжайте, пока ваша команда telnet не подключится.ddev ssh и попробуйте снова telnet host.docker.internal 9000. Он должен подключиться. Если нет, возможно, PHPStorm не прослушивает или не настроен для прослушивания порта 9000?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.Примечание от @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
Спасибо за отличные шаги по отладке. В моем случае шаг с ping host.docker.internal не удался, и решением был не чрезмерно агрессивный брандмауэр, а вот это: github.com/docker/for-mac/issues/2965#issuecomment-574832076 Использование Mac с последними версиями Docker для Mac, DDEV и PhpStorm.
Спасибо, возникла та же проблема, и добавление файла .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.
Собирайте журнал xdebug - только так вы сможете увидеть, что происходит.