未建立连接。可能“xdebug.remote_host=host.docker.internal”不正确。更改“xdebug.remote_host”

Aer*_*dir 1 phpunit xdebug phpstorm docker xdebug-3

我正在尝试通过 PhpStorm (v2022.3.2) 使用 Xdebug (v3) 从 Docker 容器内部调试 PHPUnit 测试方法。

Xdebug 已正确设置,PhpStorm 中的服务器也是如此。

事实上,如果我从命令行运行测试,Xdebug 将在断点处停止:

XDEBUG_SESSION=1 PHP_IDE_CONFIG="serverName=myapp.localhost" vendor/bin/phpunit --testdox --filter testProfileUpdate
Run Code Online (Sandbox Code Playgroud)

如果我单击测试方法左侧的“bug”图标来调试测试,则会收到以下错误:

未建立连接。可能“xdebug.remote_host=host.docker.internal”不正确。更改“xdebug.remote_host”。

查看PhpStorm 执行的调试测试方法的命令,我看到的是:

[docker://myapp:latest/]:php -dxdebug.mode=debug -dxdebug.client_port=9000 -dxdebug.client_host=host.docker.internal /opt/project/vendor/phpunit/phpunit/phpunit --configuration /opt/project/phpunit.xml --filter "/(ProfileTest::testProfileUpdate)( .*)?$/" --test-suffix ProfileTest.php /opt/project/tests --teamcity
Run Code Online (Sandbox Code Playgroud)

尝试配置另外两个标志

我还尝试配置另外两个标志

  • -dxdebug.idekey="serverName=myapp.localhost"
  • -dxdebug.session=1

结果命令是这样的:

[docker://myapp:latest/]:php -dxdebug.mode=debug -dxdebug.client_port=9000 -dxdebug.client_host=host.docker.internal -dxdebug.idekey="serverName=myapp.localhost" -dxdebug.session=1 /opt/project/vendor/phpunit/phpunit/phpunit --configuration /opt/project/phpunit.xml --filter "/(ProfileTest::testProfileUpdate)( .*)?$/" --test-suffix ProfileTest.php /opt/project/tests --teamcity
Run Code Online (Sandbox Code Playgroud)

同样使用此配置,Xdebug 不会启动并且断点将被忽略(并且会弹出错误消息)。

尝试禁用 PhpStorm 传递的参数

我尝试禁用 PhpStorm 自动传递的参数,转到“设置”>“PHP”>“调试”。

然后,在“高级设置”部分中,我取消标记了“通过命令行传递所需的配置选项”选项。

现在,生成的命令是这样的:

[docker://myapp:latest/]:php /opt/project/vendor/phpunit/phpunit/phpunit --configuration /opt/project/phpunit.xml --filter "/(ProfileTest::testProfileUpdate)( .*)?$/" --test-suffix ProfileTest.php /opt/project/tests --teamcity
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,没有提到xdebug.client_host也没有xdebug.remote_host

然而,PhpStorm 继续弹出同样的错误,提到xdebug.remote_host=host.docker.internal.

我以为应该发生错误,但不同的是,有些东西说缺少必需的参数。

请求帮助

关于如何配置 PhpStorm 来启动 Xdebug 会话来调试 PHPUnit 测试有什么想法吗?

Laz*_*One 6

-dxdebug.client_port=9000

9003Xdebug 3 现在默认使用端口而不是9000. 尝试坚持这一点。

在 PhpStorm 中,您很可能同时列出了旧的和新的端口(9000,9003作为默认值)以涵盖新旧的 Xdebug 版本。但它使用CLI 脚本列表中的第一个(PHPUnit 就是)...

要么将其删除(首选;这样您就只能在9003那里),要么将其保留在最后(即9003,9000)。这是每个项目的设置,因此您可以根据需要在另一个项目中使用旧的 9000 端口。


-dxdebug.idekey="serverName=myapp.localhost"

这是行不通的(错误的方法)。您试图将其作为 Xdebug IDEKey 参数传递...但它实际上应该是名为 的变量的值。ENVPHP_IDE_CONFIG

如果你想实际使用它:

  • 查看 PHPUnit 配置文件:它能够为测试设置自定义 ENV 变量。
  • 另一个地方:PhpStorm's Run/Debug Configuration for PHPUnit 有一个Environment variables字段:尝试将其用于此目的。
  • 或者在您实际的 docker 文件/配置中使用它。

除此之外:启用 Xdebug 日志 ( xdebug.log),尝试调试(无论是工作时还是不工作时)并查看日志对于两次运行的内容(连接到哪里、响应是什么等)。您应该发现差异,从而提供可能出错的线索(进一步挖掘的方向)。

这实际上应该是调查“为什么它在这里起作用而不在那里起作用”情况时的第一步。