Xdebug Laravel Dusk в Netbeans на Homestead

В Laravel Homestead я смог использовать Xdebug для модульных тестов, функциональных тестов, поиска в браузере и т. д.

Но он зависает, когда я пытаюсь использовать Xdebug для Dusk (тесты в папке тестов/браузера).

Я думал, что эти вопросы могут помочь, но я до сих пор не заработал:

Я пробовал разные подходы, в том числе:

export XDEBUG_CONFIG = "idekey=netbeans-xdebug remote_connect_back=0 remote_host=10.0.2.2"
php artisan dusk

и

export XDEBUG_CONFIG = "idekey=netbeans-xdebug remote_host=10.0.2.2"
php -dxdebug.remote_autostart=on -dxdebug.remote_connect_back=off -dxdebug.remote_host=10.0.2.2 artisan dusk

и больше.

Я включил параметр отладки «Остановить на первой строке» в Netbeans, и Netbeans успешно останавливается на первой исполняемой строке PHP в файле artisan.

Поэтому я думаю, что export XDEBUG_CONFIG = "idekey=netbeans-xdebug remote_connect_back=0 remote_host=10.0.2.2" настроен правильно.

Но после того, как я нажимаю кнопку «Воспроизвести», чтобы продолжить код, Netbeans просто говорит «netbeans-xdebug running» в правом нижнем углу, в то время как консоль просто зависает с мигающим курсором под этой строкой: php artisan dusk tests/Browser/ExampleTest.php

Как мне изменить использование Xdebug, чтобы он работал и в Dusk?

Какую IDE/редактор вы используете (где отлаживаете)? Возможно, вам нужно увеличить максимальное количество подключений xdebug, которые он может иметь одновременно (не знаю, есть ли он у NetBeans). Это просто предположение (никогда не использовал Dusk), но Dusk может создавать отдельные процессы ... поэтому у вас может возникнуть ситуация, когда 2-е соединение (подпроцесс) ожидает завершения 1-го (основного) ...

LazyOne 15.02.2019 16:32

@LazyOne Netbeans. И я не думаю, что проблема связана с несколькими соединениями. Я только что перезагрузил весь свой компьютер с Win 10, а также перезапустил виртуальную машину Laravel Homestead Vagrant, и я все еще не могу работать с xdebug. Спасибо хоть.

Ryan 15.02.2019 16:37

Это, вероятно, не работает, потому что Dusk выполняет фактический тест PHPUnit в отдельном процессе, поэтому он не знает о XDEBUG_CONFIG. В принципе, тесты Dusk по-прежнему работают, если вы выполняете их напрямую (phpunit tests/Browser/ExampleTest.php). Главной особенностью php artisan dusk являются пользовательские .env.dusk[.local] файлы. Если вам это не нужно, вы можете попробовать вызвать им напрямую. Тогда Xdebug должен вести себя так же, как и со всеми другими вашими тестами PHPUnit.

Jonas Staudenmeir 15.02.2019 20:34

@JonasStaudenmeir Приятно знать. Это было полезно. Спасибо!

Ryan 15.02.2019 20:54

@JonasStaudenmeir Если вы напишете ответ ниже, я приму его. И, возможно, вы знаете ответ на следующий вопрос (который, если хотите, я могу написать как новый пост с вопросом, на который вы можете добавить ответ): причина, по которой я пытаюсь пройти тесты Dusk, заключается в том, что один тест Dusk успешно использует loginAs, но loginAs, похоже, не работает в другом тесте Dusk, а на снимке экрана показана пустая форма входа. Как я могу отладить, почему loginAs не работает в одном тесте Dusk, а работает в другом почти идентичном тесте Dusk? Спасибо.

Ryan 15.02.2019 21:09

@JonasStaudenmeir Хм, я сузил его до github.com/spatie/laravel-разрешение или Backpack, хотя моя база данных правильно заполнена, и у этого пользователя есть все максимальные разрешения. loginAs работает, если я временно редактирую группу маршрутов, чтобы не было определенного промежуточного программного обеспечения.

Ryan 15.02.2019 21:16

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

Jonas Staudenmeir 15.02.2019 21:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
7
815
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как и в моем ответе здесь, есть вариант запуска php -dxdebug.remote_enable=1 -dxdebug.remote_host=10.0.2.2 -dxdebug.remote_port=9000 -dxdebug.remote_handler=dbgp artisan my:command

Вы также можете добавить эти параметры в xdebug.ini следующим образом:

zend_extension_ts = "./php/ext/php_xdebug<-version-number>.dll"
xdebug.remote_enable=1
xdebug.remote_host=10.0.2.2
; Port number must match debugger port number in NetBeans IDE Tools > Options > PHP
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

xdebug.idekey=netbeans-xdebug (although I think it should work without this too)

Попробуйте убрать разрыв в первой строке. Также попробуйте запустить отладку прямо из консоли с этими параметрами. И, наконец, убедитесь, что правильный порт настроен для прослушивания в NetBeans и xdebug, так как это тоже может вызвать проблемы.

Спасибо за ответ, @Boroboris! Однако это оставляет мне ту же проблему, что и мой вопрос: Netbeans просто говорит «netbeans-xdebug running» в правом нижнем углу, а консоль просто зависает с мигающим курсором. Если я включу «Остановить на первой строке», ваш подход успешно сделает это, но затем (как и в моем вопросе) он зависнет на неопределенный срок после того, как я нажму «Воспроизведение», чтобы продолжить. Спасибо, в любом случае.

Ryan 15.02.2019 20:58

Вы пробовали "нормальную" отладку? Я имею в виду, останавливается ли он где-нибудь еще, если вы используете какую-то другую команду, кроме сумерек?

boroboris 15.02.2019 20:59

Конечно, ваш подход работает для пошагового выполнения кода, например. \app\Console\Commands\MyCommand.php (я только что попробовал), но это не то, что я пытаюсь сделать. Я пытаюсь пройти тест Dusk, чтобы понять, почему loginAs работает в одном тесте Dusk, но не работает в другом. Спасибо.

Ryan 15.02.2019 21:04
Ответ принят как подходящий

Это не работает, потому что Dusk выполняет фактический тест PHPUnit в отдельном процессе, поэтому он не знает о XDEBUG_CONFIG.

В принципе, тесты Dusk по-прежнему работают, если вы выполняете их напрямую (phpunit tests/Browser/ExampleTest.php). Главной особенностью php artisan dusk являются пользовательские .env.dusk[.local] файлы.

Если вам это не нужно, вы можете попробовать вызвать им напрямую. Тогда Xdebug должен вести себя так же, как и со всеми другими вашими тестами PHPUnit.

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