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

Posted

技术标签:

【中文标题】如何使用 ddev 和 PhpStorm 逐步调试 drush 命令?【英文标题】:How can I step-debug a drush command with ddev and PhpStorm? 【发布时间】:2018-10-21 08:03:18 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

PHPStorm 提供了一种非常好的方法来执行此操作,而 ddev 通过自动调试设置让这一切变得超级简单。

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

This PHPStorm blog post 解释了这项技术。

    在 PHPStorm 中创建服务器(项目设置->服务器)。我的“服务器”名称是 d8composer。不管你怎么称呼它,你只需要以后使用它。 在 PHPStorm 服务器配置中,将宿主项目目录映射到 /var/www/html

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

    在您知道应该被 drush 命令命中的位置单击断点。

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

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

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

请注意,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 对我来说,关键是切换到 vendored drush(项目根目录)。我安装了 drush (v10.3) 并禁用了 /usr/local/bin/drush。 @bfuzze 你可能想在github.com/drud/ddev/issues/2514上添加你的“我也是” 已经过时了,不是吗? 同意@sea26.2,PHP_IDE_CONFIG 现在由 ddev 自动设置。我会稍微修改一下。【参考方案2】:

同时选中 PHPStorm 并取消选中“通过未注册的服务器配置忽略外部连接”。

【讨论】:

以上是关于如何使用 ddev 和 PhpStorm 逐步调试 drush 命令?的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTML 表单,如何使用正确的 GET/POST 数据开始调试操作 PHP 脚本? (使用 PhpStorm 和 XAMPP)

如何使用 PhpStorm / WebStorm 连接到远程 nodejs 调试会话?

如何连接 PhpStorm 和 Xdebug

PHPStorm、Xdebug 和远程调试(在 phpstorm 中使用 FTP)

mac+phpstorm+xampp断点调试

PhpStorm nodemon 调试 - 不要停在断点上