如何使用 ddev 和 PhpStorm 逐步调试 drush 命令?

rfa*_*fay 2 php drupal xdebug drush ddev

我需要在 ddev 项目中调试一个 drush 命令,但我不知道该怎么做。在 ddev v0.18.0 中,PhpStorm 调试器一开始就中断了,但是找不到相关代码。

rfa*_*fay 5

2020 年 12 月 28 日更新:此答案已过时,因为 ddev 已在最新版本中为您设置了 PHP_IDE_CONFIG 环境。一般来说,如果您已经进行了任何调试(它创建了 .ddev.site “服务器”/映射),那么事情应该可以正常工作。有些人也更喜欢使用 vendor/bin/drush,因为它跳过了 /usr/local/bin/drush 的使用,它是 Drush 启动器。

------- 原答案 -------

PHPStorm 提供了一种非常好的方法来做到这一点,而 ddev 通过自动调试设置使其变得非常容易。

这种技术最适合带有 drush 的 Drupal 8 站点,就像使用 drupal-composer 设置一样。它假设 drush 被 vendored 为 vendor/drush/drush。

这篇 PHPStorm 博客文章解释了该技术。

  1. 在 PHPStorm 中创建一个服务器(项目设置->服务器)。我的“服务器”名称是 d8composer。你叫它什么并不重要,你只需要稍后使用它。
  2. 在 PHPStorm 服务器配置中,将您的宿主项目目录映射到 /var/www/html:

服务器路径映射

  1. 单击“侦听调试连接”按钮。

  2. 在您知道应该被 drush 命令击中的地方单击断点。

  3. 在容器 ( ddev ssh) 内,export PHP_IDE_CONFIG="serverName=d8composer"- 当然,您的容器将被命名为 d8composer 以外的名称。

  4. 在容器内/var/www/html/vendor/drush/drush/drush uli(或您想要的任何命令)。PHPStorm 将在您的断点处中断。(当然,您可以通过多种方式执行该命令,但关键是您需要执行供应到存储库中的 drush 版本。

在早期版本的 drupal 上,您实际上可以将 drush 的副本临时放入您的存储库中,以同样的方式解决映射问题。

请注意,Matt Glaman 还写了一篇关于Xdebug Over the Command Line with DDEV的博客文章

  • 这也适用于 Drupal 7 站点。或者,可以运行类似`PHP_IDE_CONFIG="serverName=example.ddev.local" /scripts/run-tests --class=MyClass` 之类的东西来运行测试。服务器名称与 PhpStorm 中定义的名称匹配(因此最好先通过网站触发断点以进行设置)。请注意,`ddev` 启用了 `xdebug.remote_autostart`,因此当您不需要它时,您需要使用 `disable_xdebug`。 (3认同)