如何使用 ddev 进行 xdebug/step-debugging?

问题描述 投票:0回答:4

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

按照此处讨论的方式设置 172.28.99.99 IP 地址
  • 使用 config.yaml
  • xdebug_enabled: true
  • ddev start
    启用 xdebug(并使用 phpinfo 检查以查看 xdebug 已启用。)
    将 PHPStorm 置于“侦听调试连接”模式
phpstorm xdebug ddev
4个回答
14
投票

首先,重读
    文档
  • 。您可能想阅读故障排除文档而不是这个问题,因为它们的维护频率更高。 确保xdebug已启用;出于性能原因,它默认被禁用。大多数人在需要时使用
  • ddev xdebug on
  • 启用它,并在完成后使用
    ddev xdebug off
    ,但也可以在
    .ddev/config.yaml
    中启用它。
    不要假设正在执行某些晦涩的代码片段并在那里放置断点。首先在 index.php 中的第一个可执行行处放置一个断点。哦,很多时候人们认为应该停止,但他们的代码没有被执行。
  • ddev ssh
  • 进入网络容器。你能
    ping host.docker.internal
    (并得到回复)吗?如果不能,则您的防火墙可能过于激进。
    在 PHPStorm 中,禁用“监听连接”按钮,这样它就不会监听。或者直接退出 PHPStorm。
  • ddev ssh
  • telnet host.docker.internal 9003
    可以连接吗?如果是这样,则说明您在端口 9003 上运行了其他程序,可能是 php-fpm。使用
    lsof -i :9003 -sTCP:LISTEN
    找出那里有什么并停止它,或者
    更改 xdebug 端口并配置 PHPStorm 以使用新端口
    。在 telnet 命令无法连接之前不要继续。 现在单击 PHPStorm 上的监听按钮以开始监听连接。
  • ddev ssh
  • 并再次尝试
    telnet host.docker.internal 9003
    。它应该连接。如果没有,也许 PHPStorm 没有监听,或者没有配置为监听端口 9003?
    检查并确保 Xdebug 已启用。您可以在容器内使用 
  • php -i | grep grep Xdebug
  • ,或者使用您想要的任何其他技术来提供
    phpinfo()
    的输出,包括 Drupal 的 admin/reports/status/php。您应该看到
    with Xdebug <version>, Copyright (c) 2002-202x
    并且
     php -i | grep "xdebug.remote_enable"
    应该给您
    xdebug.remote_enable: On
    在项目的index.php的第一个相关行中设置断点,然后使用浏览器访问该站点。它应该停在那里。
  • 来自 @heddn 的注释:如果您只想为 fpm 运行 xdebug,例如
phpenmod -s fpm xdebug

,而不是运行

enable_xdebug
来自 @mfrieling 的注释:如果您使用像 

XDebug Helper

这样的浏览器扩展来设置 IDE 密钥,则该扩展必须与服务器上的相同。使用的 IDE 密钥必须与服务器、发送的浏览器扩展/cookie 和 PHPStorm 上的相同。您可以通过创建包含以下两行的文件 .ddev/php/xdebug.ini 来更改 DDEV 中的 IDE 密钥(将

PHPSTORM
替换为您要使用的值:
[XDebug]
xdebug.idekey = PHPSTORM

欢迎您的关注!


1
投票
.ddev/docker-compose.xdebug.yaml

解决了问题。


但是,我在 Mac / OSX 上运行,发现这些附加步骤可以从容器内部发现内部主机的 IP 地址:

1.) 登录网络容器

ddev ssh


2.) 运行

ping docker.for.mac.localhost


3.) 在上面的yaml文件中设置

host.docker.internal

返回的IP地址。


4.) 移除并启动 DDEV。

还值得一提的是

在 PHPStorm 中验证 xdebug 对于检查配置很有用。

小心 Mac,因为它们可能正在运行 php-fpm。如果是这种情况,PHP Storm 将找不到连接(因为它已被 php-fpm 占用)。

0
投票
要查看是否是这种情况,请运行:

lsof -i :9000 -sTCP:LISTEN

如果它返回类似 php-fpm 的内容,那么你就有这个问题了
尝试关闭它(参见

PHP-FPM无法关闭

)。

修复后运行它(可能会重新启动你的 Mac),你应该看到类似这样的内容:

➜ solrpoc lsof -i :9000 -sTCP:LISTEN COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME phpstorm 512 alejandro.moreno 490u IPv6 0xaf3eef0f3233a83 0t0 TCP *:cslistener (LISTEN)

我遇到了一个问题,我使用站点的本地别名,但 Drush 假设我使用默认的 [sitename].ddev.site。由于我从未访问过该域,因此它从未提示零配置允许对话框,因此从未使用该域监听该端口。

0
投票
我点击了默认域,并在 PHPStorm“允许传入连接”对话框中选择加入,并且它起作用了。

© www.soinside.com 2019 - 2024. All rights reserved.