Phpstorm 如何使用ddev进行xdebug/step调试?
我一直在Drupal项目中使用ddev,现在我想使用xdebug,因此我可以逐步调试PhpStorm(或者任何IDE都可以)。但我似乎无法让它在断点处停止。我试着跟着他们走,但这并不能让我走,我不知道下一步该怎么办。我做到了:Phpstorm 如何使用ddev进行xdebug/step调试?,phpstorm,xdebug,ddev,Phpstorm,Xdebug,Ddev,我一直在Drupal项目中使用ddev,现在我想使用xdebug,因此我可以逐步调试PhpStorm(或者任何IDE都可以)。但我似乎无法让它在断点处停止。我试着跟着他们走,但这并不能让我走,我不知道下一步该怎么办。我做到了: 按此处所述设置172.28.99.99 IP地址 使用config.yamlxdebug\u Enabled:true和ddev start(并使用phpinfo检查xdebug是否已启用。) 将PHPStorm置于“侦听调试连接”模式 在任何设置中调试xdebug都可
- 按此处所述设置172.28.99.99 IP地址
- 使用config.yaml
和xdebug\u Enabled:true
(并使用phpinfo检查xdebug是否已启用。)ddev start
- 将PHPStorm置于“侦听调试连接”模式
- 首先,重读这本书
- 确保您拥有2019+版本的PHPStorm。2018.3之前和(包括?)的许多PHPStorm版本与较新的XDebug版本不兼容
- 确保xdebug已启用;出于性能原因,默认情况下会禁用它。大多数人使用
在需要时启用它,使用完后使用ddev exec ENABLExdebug
禁用它,但也可以在ddev exec ENABLExdebug
中启用它.ddev/config.yaml
- 不要假设正在执行某段模糊的代码,并在那里设置断点。首先在index.php中的第一个可执行行中放置一个断点。很多时候人们认为应该停止,但是他们的代码没有被执行
插入web容器。您能否ddev ssh
(并获得响应)?如果你不能,你可能有一个过度攻击的防火墙ping host.docker.internal
- 在PHPStorm中,禁用“侦听连接”按钮,使其无法侦听。或者干脆退出PHPStorm
:是否可以ddev ssh
连接?如果是这样,那么在端口9000上运行的可能是php fpm。使用telnet host.docker.internal 9000
找出并停止它,或者。在telnet命令未连接之前不要继续lsof-i:9000-sTCP:LISTEN
- 现在单击PHPStorm上的“侦听”按钮,开始侦听连接
并重试ddev ssh
。它应该连接起来。如果不是,可能PHPStorm没有侦听,或者没有配置为侦听端口9000telnet host.docker.internal 9000
- 检查以确保Xdebug已启用。您可以在容器中使用
,或者使用任何其他您想要的技术来提供php-i | grep grep Xdebug
的输出,包括Drupal的admin/reports/status/php。使用Xdebug v2.9.6,您应该看到phpinfo()
,,版权所有(c)2002-2020
应该为您提供php-i | grep“Xdebug.remote_enable”
Xdebug.remote_enable:On
- 在项目index.php的第一个相关行中设置断点,然后使用浏览器访问站点。应该到此为止
phpenmod-s fpm xdebug
,而不是运行enable\u xdebug
@mfrieling的一个注意事项:如果您使用类似的浏览器扩展来设置IDE密钥,则必须与服务器上的相同。因为“在web和db容器中为您创建了一个真实的用户,使用您的用户名和用户ID”,默认情况下,该用户名和用户ID也用作IDE密钥。服务器上使用的IDE密钥、已发送的浏览器扩展名/cookie和PHPStorm必须相同。您可以通过以下两行创建文件.DDEV/php/xdebug.ini
来更改DDEV中的IDE键(将PHPSTORM
替换为您想要使用的值):
[XDebug]
xdebug.idekey = PHPSTORM
欢迎您在此进行后续操作!谢谢,您也遇到了同样的问题,添加了文件
.ddev/docker compose.xdebug.yaml
解决了这个问题
但是,我在Mac/OSX上运行,发现这些附加步骤可以从容器中发现内部主机的IP地址:
1.)登录web continanerddev ssh
2.)运行ping docker.for.mac.localhost
3.)在上述yaml文件中设置主机.docker.internal的返回IP地址
4.)卸下并启动DDEV
同样值得一提的是,在PHPStorm中,检查配置非常有用。Collect xdebug log——只有这样,您才能看到正在发生的事情。docker.for.mac.localhost应该与host.docker.internal相同,这是docker提供该地址的旧方法。在当前版本的Docker for Mac和ddev中,您不应该做任何这些事情。非常适合调试!我遵循了所有的步骤,但仍然存在问题,结果发现xdebug在PHP7.3上还不能正常运行,所以我将我的ddev配置降低到了7.2,它工作了OOTB!应该在某处记录的想法:感谢伟大的调试步骤。在我的例子中,ping host.docker.internal
的步骤失败了,解决方案不是一个过于激进的防火墙,而是这一个:使用Mac和最新的docker for Mac、DDEV和PhpStorm版本。