Php 启用Xdebug时如何修复curl\u exec调用挂起

Php 启用Xdebug时如何修复curl\u exec调用挂起,php,docker,phpstorm,xdebug,ddev,Php,Docker,Phpstorm,Xdebug,Ddev,我已经建立了一个本地(基于docker的)PHP Drupal 7开发环境。我已使用为该站点设置了行为测试 所有Behat上下文文件和关联的composer供应商文件夹都位于网站的web根目录之外的测试文件夹中。文件夹结构类似于: 计划 测试 公共网页 我已启用xdebug并使用PhpStorm。我已经设置了PhpStorm调试服务器,并提供了正确的路径映射 通过浏览器调试php代码效果很好,调试CLI命令效果很好。当我在通过CLI运行Behat测试时尝试调试所有代码时,就会出现问题 在

我已经建立了一个本地(基于docker的)PHP Drupal 7开发环境。我已使用为该站点设置了行为测试

所有Behat上下文文件和关联的composer供应商文件夹都位于网站的web根目录之外的测试文件夹中。文件夹结构类似于:

  • 计划

    • 测试

    • 公共网页

我已启用xdebug并使用PhpStorm。我已经设置了PhpStorm调试服务器,并提供了正确的路径映射

通过浏览器调试php代码效果很好,调试CLI命令效果很好。当我在通过CLI运行Behat测试时尝试调试所有代码时,就会出现问题

在PhpStorm PHP服务器配置中,如果我只为
testing
文件夹设置路径映射,我可以调试testing文件夹中的任何代码,并且没有curl问题。显然,我无法调试
public\u html
文件夹中的代码,因为我没有设置路径映射。当我为
testing
public\u html
文件夹设置路径映射时,我可以调试所有代码,但任何行为步骤定义(包括对站点本地url的Mink
curl\u exec()
调用)都会挂起3到10分钟

我的目标…

在运行Behat测试时,能够调试
testing
public\u html
文件夹中的所有php代码,而无需挂起
curl\u exec()

我尝试过的…

我将PhpStorm Debug Max synchronized Connections设置为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
以下所有情况都导致卷曲悬挂:

  • 设置
    xdebug.remote\u autostart=0
    并通过使用my behat命令和
    • 不通过curl调用传递任何cookie或GET参数
    • 将相同的idekey作为cookie传递,并使用curl调用获取参数
    • 通过curl调用传递不同的idekey作为cookie和GET参数

非常感谢您的帮助

遵循@LazyOne的建议后,我更仔细地查看了Xdebug日志,注意到挂起是在成功连接Xdebug之后发生的。这让我想到两个可能的原因;某些未在PhpStorm调试工具窗口中注册的rouge断点或站点上的某些内容延迟了响应

因此,我做了以下工作:

  • 删除应用程序中的所有PhpStorm调试断点并重新启动PhpStorm
  • 意识到Drupal 7配置中的自动Cron设置设置为每
    1天运行一次
    ,因此将其切换为
    从不
    。我的想法可能是Drupal Cron的执行被卡住了,没有完成,所以每个HTTP请求都挂起了

  • 它成功了,现在我希望我已经分别测试了这些步骤中的每一个,因为我不知道哪一个是正确的解决方案。我倾向于#1,因为当我关闭PhpStorm中的调试时,Behat测试将毫不延迟地执行。无论哪种方式,如果您有类似的问题,请尝试以上两种方法。

    收集Xdebug日志,它可能会说明发生了什么(如果它尝试连接以及连接到哪里)
    xdebug.remote_log
    只有当您尝试从同一应用程序访问URL时才会发生这种情况吗?感谢@LazyOne和NicoHaase的建议。是的,只有当URL来自同一应用程序时,问题才会发生。我收集了Xdebug日志,它们显示正在建立连接,并且在运行命令时卡住了。这让我觉得是PhpStorm特定的东西或网站没有响应导致了问题。我在下面的回答中有更详细的说明。再次感谢!