В 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?
@LazyOne Netbeans. И я не думаю, что проблема связана с несколькими соединениями. Я только что перезагрузил весь свой компьютер с Win 10, а также перезапустил виртуальную машину Laravel Homestead Vagrant, и я все еще не могу работать с xdebug. Спасибо хоть.
Это, вероятно, не работает, потому что Dusk выполняет фактический тест PHPUnit в отдельном процессе, поэтому он не знает о XDEBUG_CONFIG. В принципе, тесты Dusk по-прежнему работают, если вы выполняете их напрямую (phpunit tests/Browser/ExampleTest.php). Главной особенностью php artisan dusk являются пользовательские .env.dusk[.local] файлы. Если вам это не нужно, вы можете попробовать вызвать им напрямую. Тогда Xdebug должен вести себя так же, как и со всеми другими вашими тестами PHPUnit.
@JonasStaudenmeir Приятно знать. Это было полезно. Спасибо!
@JonasStaudenmeir Если вы напишете ответ ниже, я приму его. И, возможно, вы знаете ответ на следующий вопрос (который, если хотите, я могу написать как новый пост с вопросом, на который вы можете добавить ответ): причина, по которой я пытаюсь пройти тесты Dusk, заключается в том, что один тест Dusk успешно использует loginAs, но loginAs, похоже, не работает в другом тесте Dusk, а на снимке экрана показана пустая форма входа. Как я могу отладить, почему loginAs не работает в одном тесте Dusk, а работает в другом почти идентичном тесте Dusk? Спасибо.
@JonasStaudenmeir Хм, я сузил его до github.com/spatie/laravel-разрешение или Backpack, хотя моя база данных правильно заполнена, и у этого пользователя есть все максимальные разрешения. loginAs работает, если я временно редактирую группу маршрутов, чтобы не было определенного промежуточного программного обеспечения.
Трудно сказать, не видя кода. Если вы создадите минимальное приложение и загрузите его куда-нибудь, я посмотрю.






Как и в моем ответе здесь, есть вариант запуска 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» в правом нижнем углу, а консоль просто зависает с мигающим курсором. Если я включу «Остановить на первой строке», ваш подход успешно сделает это, но затем (как и в моем вопросе) он зависнет на неопределенный срок после того, как я нажму «Воспроизведение», чтобы продолжить. Спасибо, в любом случае.
Вы пробовали "нормальную" отладку? Я имею в виду, останавливается ли он где-нибудь еще, если вы используете какую-то другую команду, кроме сумерек?
Конечно, ваш подход работает для пошагового выполнения кода, например. \app\Console\Commands\MyCommand.php (я только что попробовал), но это не то, что я пытаюсь сделать. Я пытаюсь пройти тест Dusk, чтобы понять, почему loginAs работает в одном тесте Dusk, но не работает в другом. Спасибо.
Это не работает, потому что Dusk выполняет фактический тест PHPUnit в отдельном процессе, поэтому он не знает о XDEBUG_CONFIG.
В принципе, тесты Dusk по-прежнему работают, если вы выполняете их напрямую (phpunit tests/Browser/ExampleTest.php). Главной особенностью php artisan dusk являются пользовательские .env.dusk[.local] файлы.
Если вам это не нужно, вы можете попробовать вызвать им напрямую. Тогда Xdebug должен вести себя так же, как и со всеми другими вашими тестами PHPUnit.
Какую IDE/редактор вы используете (где отлаживаете)? Возможно, вам нужно увеличить максимальное количество подключений xdebug, которые он может иметь одновременно (не знаю, есть ли он у NetBeans). Это просто предположение (никогда не использовал Dusk), но Dusk может создавать отдельные процессы ... поэтому у вас может возникнуть ситуация, когда 2-е соединение (подпроцесс) ожидает завершения 1-го (основного) ...