|
Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Прочие - [решено] [php + xdebug] Необычная конфигурация и... какой-то парадокс |
|
Прочие - [решено] [php + xdebug] Необычная конфигурация и... какой-то парадокс
|
Ветеран Сообщения: 784 |
Для отладки сайта подготовил такую конфигурацию.
1.Сервер разработки (Linux + nginx + php-fpm + xdebug) развёрнут на гостевой машине (с помощью Virtual Box) 2.Все файлы сайта физически хранятся на хост-машине (Windows 10), а в гостевой машине директория сайта mount'ится (используется функционал Virtual Box по созданию общих папок) 3.PHPStorm установлен также на хост-машине, отладка кода выполняется на хост-машине 4.Средствами Virtual Box с помощью NAT-сети настроен проброс порта со 127.0.0.1:80 хост-машины на 10.0.2.15:80 гостевой машины (10.0.2.15 - это IP гостевой машины в NAT-сети), плюс файл host, чтобы при запросе страниц сайта из хост-машины запросы физически поступали в гостевую машину (на сервер разработки). Запросы нормально работают. Задача заключается в настройке связки PHPStorm + xdebug. PHPStorm работает на хост-машине, xdebug - в гостевой машине. Нужно их подружить. В PHPStorm установил галку "Can accept external connections", указал порт отладки 9999, тот же порт указал в настройках xdebug. также в настройках xdebug прописан [xdebug.remote_connect_back = 1], чтобы xdebug определял ip-адрес клиента отладки (в данном случае клиентом отладки является PHPStorm, работающий на хост-машине) автоматически из полученного запроса. Что имеем (ситуация 1) Если средствами Virtual Box добавить проброс порта с 127.0.0.1:9999 хост-машины на 10.0.2.15:9999 гостевой машины (10.0.2.15 - это IP гостевой машины), то при попытке включения прослушки PHPStorm ругается: "Can't start listening for connections from 'xdebug': Port 9999 is busy". Понятно, почему - порт 9999 слушает Virtual Box (чтобы пробрасывать все запросы с этого порта в гостевую машину). Что имеем (ситуация 2) Убираем проброс порта с 127.0.0.1:9999 хост-машины на 10.0.2.15:9999 гостевой машины. После этого прослушка в PHPStorm включается нормально. Ставим breakpoint и отправляем запрос веб-серверу с параметром XDEBUG_SESSION_START (не важно как - из самого PHPStorm или из браузера с установленным и включенным xdebug-плагином). В итоге на хост-машине имеем: 1) баузер ждёт ответа 2) PHPStorm активирует кнопку "Stop" (красный квадрат) - отсюда делаем вывод, что PHPStorm получил на порт 9999 команду инициализации от xdebug (иначе запрос был бы сразу завершён как при обычном запуске НЕ в режиме отладки) 3) До breakpoint дело не доходит, PHPStorm бесконечно ждёт, браузер тоже ждёт 4) Если в PHPStorm нажать кнопку "Stop" (красный квадрат), то запрос завершается, в браузере отображается HTML-код запрошенной страницы (как при запуске обычного запроса НЕ в режиме отладки) - отсюда делаем вывод, что PHPStorm нормально отправляет xdebug'у (работающему на гостевой машине) запрос на завершение отладки, а xdebug нормально получает этот запрос и отправляет хост-машине HTML-код запрошенной страницы Эти два вывода подтверждаются логами xdebug. После начала сессии отладки: Цитата:
Цитата:
Но тогда почему PHPStorm не получает от xdebug (ждёт бесконечно) состояние в точках останова ? Это можно объяснить тем, что после инициализации сессии отладки PHPStorm не получает ничего на порт 9999. Поэтому и ждёт бесконечно. Но тогда каким образом выполняется успешный коннект между PHPStorm и xdebug (если PHPStorm ничего не получает на порт 9999), о чём прямо написано в логах xdebug ? Парадокс... |
|||
Отправлено: 23:33, 07-07-2017 |
Ветеран Сообщения: 784
|
Профиль | Отправить PM | Цитировать В настройках xdebug вместо
попробовал явно указать IP-адрес хост-машины в NAT-сети (на которой работает PHPStorm и слушает порт 9999): В итоге - всё то же самое (php-fpm перезагружаю). Логи xdebug при инициализации сессии: Цитата:
|
|
Последний раз редактировалось CyraxZ, 08-07-2017 в 00:21. Отправлено: 00:13, 08-07-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 784
|
Профиль | Отправить PM | Цитировать Проблема решена. В сабжевой ситуации имело место следующее:
1. PHPStorm нормально получал от xdebug отладочную информацию на порт 9999 (по протоколу dbgp) 2. Выполнение скрипта реально останавливалось (не зависимо от наличия и расположения breakpoint'ов), но останавливалось на 1-й строке главного файла скрипта index.php - по той причине, что в настройках PHPStorm стояла галка "Settings - Languages & Framework - PHP - Debug - Break at first line in PHP scripts". Судя по всему, когда настраивал отладчик, нажал "Break at first line in PHP scripts" в Event log. 3. После остановки выполнения скрипта на 1-й строке index.php PHPStorm не открывал этот файл и не показывал текущую строку выполнения (при этом окно "Debug" и кнопки "Stop", "Resume", "Step Over" и прочие активизировались) - по той причине, что у меня не были установлены правила мэппинга для локального веб-сервера (сервера разработки), работающего в гостевой машине (ранее у меня веб-сервер и xdebug тоже работали на хост-машине и правила мэппинга для сервера разработки были не нужны - соответствие между путями веб-сервера в составе xdebug-запроса и путями к отлаживаемым файлам со стороны PHPStorm было 1:1) PHPStorm искал файл, указываемый в xdebug-запросе, поступающем на порт 9999 (в данном случае - index.php) по тому же пути /home/user/www/site/index.php, который был указан в этом xdebug-запросе. Но поскольку у меня на хост-машине (где работает PHPStorm) файлы сайта расположены в другой директории, нужно было: - включить галку "Settings - Languages & Framework - PHP - Servers - <имя сервера> - Use path mappings" - указать директорию на хост-машине (где работает PHPStorm), соответствующую директории /home/user/www/site/index.php на гостевой машине (на которой работает веб-сервер и xdebug) |
Отправлено: 13:41, 10-07-2017 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Необычная конфигурация для рабочей станции | OSAMA | Выбор отдельных компонентов компьютера и конфигурации в целом | 7 | 28-05-2016 23:30 | |
Доступ - [решено] Какой то глюк с ip. Какой не выставлю все "повторяющиеся" | SAVVATEY | Microsoft Windows 7 | 21 | 03-12-2015 21:21 | |
какой-то вирус | Хмурый | Лечение систем от вредоносных программ | 10 | 22-02-2015 18:03 | |
Разное - Какой-то глюк с активацией | MaddyMAn | Microsoft Windows 2000/XP | 1 | 31-05-2010 12:07 | |
Не работает xdebug | Templar_ | Вебмастеру | 3 | 15-09-2009 20:37 |
|