Как исправить зависание вызова curl_exec при включенном Xdebug - PullRequest
1 голос
/ 16 мая 2019

У меня локальная ddev (на основе докера) PHP Drupal 7 настроенная среда разработки.Я настроил Behat тесты для этого сайта, используя Behat Drupal Extension .

Все файлы контекста Behat и связанная с ним папка поставщика композитора находятся за пределами корневого веб-сайта сайта в папке тестирования.Структура папок выглядит примерно так:

  • Проект

    • тестирование

    • public_html

У меня xdebug включен и используется PhpStorm .Я настроил сервер отладки PhpStorm и предоставил правильные пути.

Отладка php кода через браузер работает отлично, отладка CLI команд работает отлично.Моя проблема возникает, когда я пытаюсь отладить весь код во время выполнения тестов Behat через CLI.

В конфигурации PHP-сервера PhpStorm, если я устанавливаю только сопоставления путей для папки testing, я могу отлаживать любой код в пределахпапка тестирования и нет проблем с завитком.Я, очевидно, не могу отладить код в папке public_html, потому что я не установил сопоставления путей.Когда я устанавливаю сопоставления путей для папок testing и public_html, я могу отлаживать весь код, но любое определение шага behat, которое включает вызов Mink curl_exec() на локальный URL сайта, зависает от 3 до 10минут!

Моя цель ...

Чтобы иметь возможность отлаживать весь php-код в папках testing и public_html при выполнении тестов Behat без curl_exec() висит.

То, что я пробовал ...

У меня PhpStorm Debug Max одновременных подключений установлено на 10, и я попробовал 20.

Здесьмои настройки удаленной конфигурации xdebug:

xdebug.remote_addr_header => no value => no value
xdebug.remote_autostart => On => On
xdebug.remote_connect_back => Off => Off
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_host => host.docker.internal => host.docker.internal
xdebug.remote_log => no value => no value
xdebug.remote_mode => req => req
xdebug.remote_port => 9000 => 9000

Все перечисленные ниже действия привели к зависанию curl:

  • Установите xdebug.remote_autostart=0 и запустите сеанс Xdebug, передав XDEBUG_CONFIG=idekey=PHPSTORM переменная окружения с моей командой behat И
    • НЕ передает ни cookie, ни параметр GET с вызовом curl.
    • Передаёт те же idekey какпараметр cookie и GET с вызовом curl
    • Передача другого идентификатораключ в качестве файла cookie и параметр GET с помощью вызова curl

Любая помощь приветствуется !!

1 Ответ

0 голосов
/ 17 мая 2019

После следования совету @LazyOne я более внимательно посмотрел журналы Xdebug и заметил, что зависание происходит после успешного установления соединения xDebug.Это привело меня к двум возможным причинам;какая-то точка останова ружья, которая не регистрировалась в окне средства отладки PhpStorm или что-то на сайте, задерживала ответ.

Поэтому я сделал следующее:

  1. Удалил все точки останова PhpStorm Debugв приложении и перезапустил PhpStorm.
  2. Понял, что параметр Automatic Cron в Drupal 7 Configuration был настроен на запуск каждые 1 Day, поэтому переключил его на Never.Возможно, я думал, что выполнение Drupal Cron застряло и не завершилось, поэтому каждый HTTP-запрос зависзнаю, какой именно был решением.Я склоняюсь к # 1, потому что, когда я отключил отладку в PhpStorm, тест Behat будет выполняться без задержки.В любом случае, если у вас есть похожая проблема, попробуйте оба варианта выше.
...