启用Xdebug时如何修复curl_exec调用挂起

时间:2019-05-16 02:48:04

标签: php docker phpstorm xdebug ddev

我有一个本地ddev(基于docker) PHP Drupal 7 开发环境。我已经使用Behat Drupal Extension为此站点设置了 Behat 测试。

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

  • 项目

    • 测试

    • public_html

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

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

在PhpStorm PHP服务器配置中,如果仅设置testing文件夹的路径映射,则可以调试测试文件夹中的任何代码,并且没有卷曲问题。我显然无法调试public_html文件夹中的代码,因为我尚未设置路径映射。当我同时设置了testingpublic_html文件夹的路径映射时,我可以调试所有代码,但是任何包含对站点本地URL的Mink curl_exec()调用的behat步骤定义都将挂起。持续3到10分钟!

我的目标...

为了能够在运行testing且不挂起public_html的Behat测试时调试curl_exec()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 文件夹中的所有php代码。

我尝试过的...

我已将PhpStorm Debug Max同时连接设置为10,并尝试了20。

这是我的xdebug远程配置设置:

xdebug.remote_autostart=0

以下所有原因均导致卷曲挂起:

  • 设置XDEBUG_CONFIG=idekey=PHPSTORM并通过使用我的behat命令传递一个print(x[10:0:-1])环境变量来启动Xdebug会话,并且
    • 不通过curl调用传递任何cookie或 GET 参数。
    • 通过curl调用传递与cookie和GET参数相同的 idekey
    • 通过curl调用传递不同的idekey作为cookie和GET参数

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在遵循@LazyOne的建议之后,我更加仔细地查看了Xdebug日志,并注意到在成功建立xDebug连接之后发生了挂起。这导致我两个可能的原因;一些尚未在PhpStorm调试工具窗口中注册的胭脂断点,或者网站上的某些内容正在延迟响应。

所以我做了以下事情:

  1. 删除了应用程序中的所有PhpStorm调试断点,然后重新启动了PhpStorm。
  2. 实现了在Drupal 7配置中将“自动定时”设置设置为每1 Day运行一次,因此将其切换为Never。我的想法可能是Drupal Cron的执行被卡住了并且没有完成,所以每个HTTP请求都挂起了。

它奏效了,现在我希望我分别测试了每个步骤,因为我不知道到底哪个是解决方案。我倾向于#1,因为当我关闭PhpStorm中的调试时,Behat测试将立即执行。无论哪种方式,如果您遇到类似的问题,请尝试以上两种方法。