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 自动传递的参数,转到“设置”>“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 测试有什么想法吗?
-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
如果你想实际使用它:
Environment variables字段:尝试将其用于此目的。除此之外:启用 Xdebug 日志 ( xdebug.log),尝试调试(无论是工作时还是不工作时)并查看日志对于两次运行的内容(连接到哪里、响应是什么等)。您应该发现差异,从而提供可能出错的线索(进一步挖掘的方向)。
这实际上应该是调查“为什么它在这里起作用而不在那里起作用”情况时的第一步。
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |