|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
Для отладки сайта подготовил такую конфигурацию. 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 указал порт отладки 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%5D%5D></url><copyright><!]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 ? Парадокс... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 23:26 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
В PHPStorm галка " Can accept external connections " установлена. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 23:49 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
В настройках xdebug вместо Код: php 1.
попробовал явно указать IP-адрес хост-машины в NAT-сети (на которой работает PHPStorm и слушает порт 9999 ): Код: php 1. 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%5D%5D></url><copyright><!]http://xdebug.org]]></url><copyright><! [CDATA[Copyright (c) 2002-2014 by Derick Rethans]]></copyright></init>Всё, что я описал в теме - так же советуют здесь и здесь (используется такая же конфигурация, когда IDE работает на хост-машине, а веб-сервер и xdebug - на гостевой машине). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2017, 00:12 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
примерно такая же схема, только в Виртуалбоксе тип подключения - сетевой мост. Без всяких NAT`ов завелось сразу, осталось только маппинг прописать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2017, 07:58 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
Проблема решена. В сабжевой ситуации имело место следующее: 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 ) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2017, 13:57 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
авторпримерно такая же схема, только в Виртуалбоксе тип подключения - сетевой мост. Без всяких NAT`ов завелось сразуДва вопроса: 1 . Почему вы храните файлы сайта на хост-машине, а не в гостевой машине ? 2 . Как вы справляетесь с сильнейшими тормозами при работе веб-сервера с файлами сайта, которые являются общими для хост-машины и гостевой машины (shared folders) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2017, 14:50 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
Cyrax_02, как раз файлы проектов хранятся на гостевой машине. На хосте проект открываю через smb-шару.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2017, 22:53 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
авторНа хосте проект открываю через smb-шару.. И PHPStorm не тормозит ? Индексация, подсказки по параметрам и методам и пр. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 13:39 |
|
[php + xdebug] Необычная конфигурация и... какой-то парадокс
|
|||
---|---|---|---|
#18+
Cyrax_02, Но на то есть File\Settings\Directories -> Excluded... А так, первый раз проиндексировал и все. Во всяком случае, изрядных тормозов не замечал. Опять же, это дома такая схема, а на работе всё локально.. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 21:41 |
|
|
start [/forum/topic.php?fid=23&msg=39485078&tid=1460585]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
89ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 321ms |
total: | 479ms |
0 / 0 |