6

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

  • 按照那里的讨论设置 172.28.99.99 IP 地址
  • 使用 config.yaml 启用 xdebugxdebug_enabled: true并且ddev start(并使用 phpinfo 检查 xdebug 是否已启用。)
  • 将 PHPStorm 置于“监听调试连接”模式
4

3 回答 3

11

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

  • 首先,重新阅读文档
  • 确保您拥有 2019+ 版本的 PHPStorm。直到和(包括?)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。你应该看到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

欢迎您的跟进!

于 2018-04-06T15:49:30.533 回答
0

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

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

lsof -i :9000 -sTCP:LISTEN

如果它返回类似 php-fpm 的东西,那么你有这个问题

尝试关闭它(参见PHP-FPM can't be closed)。

修复它后运行它(可能重新启动你的 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)
于 2021-12-15T11:50:30.823 回答
0

谢谢,遇到了同样的问题,添加文件.ddev/docker-compose.xdebug.yaml解决了这个问题。

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

1.) 登录网络容器ddev ssh

2.) 运行ping docker.for.mac.localhost

host.docker.internal3.)在上面的 yaml 文件中设置返回的 IP 地址。

4.) 移除并启动 DDEV。

另外值得一提的是,在 PHPStorm 中验证 xdebug对于检查配置很有用。

于 2018-06-15T13:10:44.987 回答