Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Прочие - [решено] [php + xdebug] Необычная конфигурация и... какой-то парадокс

Ответить
Настройки темы
Прочие - [решено] [php + xdebug] Необычная конфигурация и... какой-то парадокс

Аватара для CyraxZ

Ветеран


Сообщения: 780
Благодарности: 11

Профиль | Отправить PM | Цитировать


Изменения
Автор: CyraxZ
Дата: 07-07-2017
Для отладки сайта подготовил такую конфигурацию.
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. После начала сессии отладки:
Цитата:
Log opened at 2017-07-07 19:14:10
I: Checking remote connect back address.
I: Remote address found, connecting to 10.0.2.2:9999.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///home/user/www/site/index.php" language="PHP" protocol_version="1.0" appid="981" idekey="12155"><engine version="2.2.5"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2014 by Derick Rethans]]></copyright></init>

<- feature_set -i 1 -n show_hidden -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="show_hidden" success="1"></response>
...
При завершении сессии отладки (жмём кнопку "Stop" в PHPStorm):
Цитата:
<- stop -i 19
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="stop" transaction_id="19" status="stopped" reason="ok"></response>

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="stop" transaction_id="19" status="stopping" reason="ok"></response>

<- run -i 20
Log closed at 2017-07-07 19:17:33
Как видно из логов, коннект между PHPStorm и xdebug состоялся успешно.
Но тогда почему PHPStorm не получает от xdebug (ждёт бесконечно) состояние в точках останова ?

Это можно объяснить тем, что после инициализации сессии отладки PHPStorm не получает ничего на порт 9999. Поэтому и ждёт бесконечно. Но тогда каким образом выполняется успешный коннект между PHPStorm и xdebug (если PHPStorm ничего не получает на порт 9999), о чём прямо написано в логах xdebug ? Парадокс...

Отправлено: 23:33, 07-07-2017

 

Аватара для CyraxZ

Ветеран


Сообщения: 780
Благодарности: 11

Профиль | Отправить PM | Цитировать


В настройках xdebug вместо
PHP код: Выделить весь код

xdebug.remote_connect_back 

попробовал явно указать IP-адрес хост-машины в NAT-сети (на которой работает PHPStorm и слушает порт 9999):
PHP код: Выделить весь код

xdebug.remote_connect_back 0
xdebug
.remote_host 10.0.2.2 

В итоге - всё то же самое (php-fpm перезагружаю). Логи xdebug при инициализации сессии:
Цитата:
Log opened at 2017-07-07 21:02:22
I: Connecting to configured address/port: 10.0.2.2:9999.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///home/user/www/site/index.php" language="PHP" protocol_version="1.0" appid="1148" idekey="netbeans-xdebug"><engine version="2.2.5"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2014 by Derick Rethans]]></copyright></init>
Всё, что я описал в теме - так же советуют здесь, здесь и здесь (используется такая же конфигурация, когда IDE работает на хост-машине, а веб-сервер и xdebug - на гостевой машине).

Последний раз редактировалось CyraxZ, 08-07-2017 в 00:21.


Отправлено: 00:13, 08-07-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для CyraxZ

Ветеран


Сообщения: 780
Благодарности: 11

Профиль | Отправить 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



Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Прочие - [решено] [php + xdebug] Необычная конфигурация и... какой-то парадокс

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Необычная конфигурация для рабочей станции 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




 
Переход