问题描述
环境
我正在使用
- Windows 10
- Windows 版 Docker 桌面 3
- XDebug 3
- PHPStorm 2021.1.2
使用这些 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 以某种方式创建到 PHPStorm 的连接数超过其“最大同时连接数”值,但即使将其设置为最高,问题似乎也会发生值 (20),而不会在调试面板中创建多个选项卡。
问题
XDebug 适用于浏览器请求和 CLI 脚本,我可以成功启动单步调试,但几分钟后,XDebug 和 PHPStorm 之间的连接似乎总是随着“管道损坏”警告消失 strong> 当 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
问题排查
- 在 IDE 中关闭“侦听 PHP 调试连接”会导致脚本立即恢复执行,但将其重新打开会导致下一个请求也无限期挂起
- 重启 PHPStorm 不仅可以恢复请求/脚本的执行,还可以恢复分步调试。但几分钟后,单步调试再次不可用,请求无限期挂起。
调查
- This comment 表明这是因为 IDE 在 XDebug 可以发送“停止”响应之前关闭连接。
- 似乎有 a currently unresolved bug in Windows Docker Desktop 使 Docker 在一段时间不活动后丢弃空闲 TCP 连接,从而导致 XDebug 会话结束,即使脚本继续运行。
问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)