如何使用 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 调试会话?