Предупреждение о сломанной трубе XDebug - PhpStorm или Docker закрывает соединение?
Среда
я использую
- Windows 10
- Docker Desktop 3 для Windows
- С контейнером с переменной окружения
PHP_IDE_CONFIG=serverName=Docker
- С контейнером с переменной окружения
- XDebug 3
- PhpStorm 2021.1.2
- С записью в «Настройки»> «PHP»> «Серверы» под названием «Docker».
С этими настройками XDebug:
php -i | grep xdebug
xdebug.cli_color => 0
xdebug.client_discovery_header => no value
xdebug.client_host => host.docker.internal
xdebug.client_port => 9003
xdebug.cloud_id => no value
xdebug.collect_assignments => Off
xdebug.collect_return => Off
xdebug.connect_timeout_ms => 200
xdebug.discover_client_host => Off
xdebug.dump.COOKIE => no value
xdebug.dump.ENV => no value
xdebug.dump.FILES => no value
xdebug.dump.GET => no value
xdebug.dump.POST => no value
xdebug.dump.REQUEST => no value
xdebug.dump.SERVER => no value
xdebug.dump.SESSION => no value
xdebug.dump_globals => On
xdebug.dump_once => On
xdebug.dump_undefined => Off
xdebug.file_link_format => no value
xdebug.filename_format => no value
xdebug.force_display_errors => Off
xdebug.force_error_reporting => 0
xdebug.gc_stats_output_name => gcstats.%p
xdebug.halt_level => 0
xdebug.idekey => no value
xdebug.log => /var/log/foo/xdebug.log
xdebug.log_level => 7
xdebug.max_nesting_level => 256
xdebug.max_stack_frames => -1
xdebug.mode => develop,coverage,debug,gcstats,profile,trace
xdebug.output_dir => /var/log/foo
xdebug.profiler_append => Off
xdebug.profiler_output_name => cachegrind.out.%p
xdebug.scream => Off
xdebug.show_error_trace => Off
xdebug.show_exception_trace => Off
xdebug.show_local_vars => Off
xdebug.start_upon_error => default
xdebug.start_with_request => yes
xdebug.trace_format => 0
xdebug.trace_options => 0
xdebug.trace_output_name => trace.%c
xdebug.trigger_value => no value
xdebug.var_display_max_children => 128
xdebug.var_display_max_data => 512
xdebug.var_display_max_depth => 3
Проблема
XDebug работает как для запросов браузера, так и для сценариев CLI, и я могу успешно инициировать пошаговую отладку, но через несколько минут соединение между XDebug и PhpStorm всегда исчезает вместе с предупреждением о «сломанной трубе», когда XDebug пытается отправить сообщение «остановка». "ответ, и последующие запросы / скрипты зависают на неопределенный срок. Журналы XDebug показывают это:
[95] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
[95] [Step Debug] WARN: 2021-05-26 20:55:26.677006: There was a problem sending 179 bytes on socket 5: Broken pipe.
[95] Log closed at 2021-05-26 20:55:26.677314
Поиск проблемы
Перезапуск PhpStorm решает эту проблему, но она всегда повторяется через несколько минут.
Расследование
- Этот комментарий предполагает, что это связано с тем, что среда IDE закрывает соединение до того, как XDebug сможет отправить ответ «остановка».
- Похоже, что есть в Windows Docker Desktopнерешенная в настоящее время ошибка, из-за которой Docker отбрасывает неиспользуемые TCP-соединения после периода бездействия, что приводит к завершению сеансов XDebug, даже если сценарий продолжает выполняться.
Вопросов
- Ответственен ли PhpStorm за закрытие соединения, и можно ли настроить его иначе?
- Является ли Docker ответственность закрытие соединения, и есть обходной путь?
- Может быть что-то совсем другое?