如何让 xdebug/step-debugging 与 ddev 一起工作?

rfa*_*fay 3 xdebug phpstorm ddev

我一直在使用 ddev 处理我的 Drupal 项目,现在想使用 xdebug,所以我可以使用 PhpStorm 进行逐步调试(或者任何 IDE 都可以)。但我似乎无法让它在断点处停止。我试图按照ddev docs 中说明进行操作,但这并不能让我继续前进,而且我不知道下一步该做什么。我做了:

  • 按照那里的讨论设置 172.28.99.99 IP 地址
  • 使用 config.yamlxdebug_enabled: trueddev start(并使用 phpinfo 检查以查看 xdebug 是否已启用。)
  • 将 PHPStorm 置于“侦听调试连接”模式

rfa*_*fay 7

在任何设置中调试 xdebug 都可能有点麻烦,但这里是要采取的步骤:

  • 首先,重新阅读文档
  • 确保您拥有 2019+ 版本的 PHPStorm。2018.3 和(包括?)2018.3 之前的许多 PHPStorm 版本与较新的 XDebug 版本不兼容。
  • 确保 xdebug 已启用;出于性能原因,默认情况下它是禁用的。大多数人习惯于在ddev exec enable_xdebug需要时启用它,ddev exec disable_xdebug当他们完成它时,但它也可以在.ddev/config.yaml.
  • 不要假设正在执行一些晦涩的代码并在那里放置断点。首先在 index.php 的第一个可执行行上放置一个断点。哦,很多时候人们认为它应该停止,但他们的代码没有被执行。
  • ddev ssh进入网络容器。你能ping host.docker.internal(并得到回应)吗?如果你不能,你可能有一个过于激进的防火墙。
  • 在 PHPStorm 中,禁用“监听连接”按钮,这样它就不会监听。或者直接退出 PHPStorm。
  • ddev ssh: 可以telnet host.docker.internal 9000连接吗?如果是这样,那么您在端口 9000 上运行了其他东西,可能是 php-fpm。使用lsof -i :9000 -sTCP:LISTEN找出什么是存在的,停止或改变Xdebug的端口和配置PHPStorm使用新的一个。在您的 telnet 命令无法连接之前不要继续。
  • 现在单击 PHPStorm 上的监听按钮开始监听连接。
  • ddev ssh然后再试telnet host.docker.internal 9000一次。它应该连接。如果没有,也许 PHPStorm 没有监听,或者没有配置为监听 9000 端口?
  • 检查以确保启用了 Xdebug。您可以php -i | grep grep Xdebug在容器内部使用,或者使用您想要的任何其他技术来提供 输出phpinfo(),包括 Drupal 的 admin/reports/status/php.ini。你应该看到with Xdebug v2.9.6, Copyright (c) 2002-2020并且 php -i | grep "xdebug.remote_enable"应该给你xdebug.remote_enable: On
  • 在您项目的 index.php 的第一行相关行中设置断点,然后使用浏览器访问该站点。它应该停在那里。

@heddn 的注释:phpenmod -s fpm xdebug例如,如果您只想让 xdebug 为 fpm运行,而不是运行enable_xdebug.

@mfrieling 的注释:如果您使用设置 IDE 密钥的XDebug Helper等浏览器扩展,则必须与服务器上的相同。从DDEV 1.10.0 开始, “在 web 和 db 容器中为您创建了一个真实用户,带有您的用户名和用户 ID”,默认情况下也用作 IDE 密钥。服务器上使用的 IDE 密钥必须相同,发送的浏览器扩展/cookie 和 PHPStorm。您可以通过创建.ddev/php/xdebug.ini包含以下两行的文件来更改 DDEV 中的 IDE 密钥(替换PHPSTORM为您要使用的值:

[XDebug]
xdebug.idekey = PHPSTORM
Run Code Online (Sandbox Code Playgroud)

欢迎您的关注!

  • 感谢您提供出色的调试步骤。就我而言,“ping host.docker.internal”步骤失败了,解决方案不是过于激进的防火墙,而是这个:https://github.com/docker/for-mac/issues/2965#issuecomment -574832076 使用具有最新 Docker for Mac、DDEV 和 PhpStorm 版本的 Mac。 (2认同)