如何使用ddev进行xdebug /步骤调试?

时间:2018-04-05 16:25:51

标签: phpstorm xdebug ddev

我一直在我的Drupal项目上使用ddev,现在想要使用xdebug,所以我使用PhpStorm进行步骤调试(或者实际上任何IDE都没问题)。但我似乎无法让它停在断点上。我试图遵循instructions in ddev docs,但这并没有让我离开,我不知道接下来该做什么。我做了:

  • 设置172.28.99.99 IP地址,如
  • 所述
  • 使用config.yaml xdebug_enabled: trueddev start启用xdebug(并使用phpinfo检查xdebug是否已启用。)
  • 将PHPStorm置于“侦听调试连接”模式

2 个答案:

答案 0 :(得分:2)

[编辑2018-05-10以反映ddev v0.18.0中的XDebug设置的主要简化,编辑2018-06-16以反映Linux用户的解决方法进入v0.19.0] [编辑2018-09-15添加说明,以查明是否有其他东西正在侦听端口9000]

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

  • 首先,重读docs
  • 确保已启用xdebug;它默认从v0.16.0开启禁用。我通常在项目的.ddev / config.yaml(xdebug_enabled:true)中启用它,但你也可以ddev exec enable_xdebug
  • ddev ssh进入网络容器。你可以ping host.docker.internal(并获得回复)吗?如果你不能,你可能会有一个过度激进的防火墙。
  • 在PHPStorm中,禁用“侦听连接”按钮,使其不会侦听。或者只是退出PHPStorm。
  • ddev ssh:可以telnet host.docker.internal 9000连接吗?如果是这样,你还有其他东西在端口9000上运行,可能是php-fpm。使用lsof -i :9000 -sTCP:LISTEN找出有效内容并将其停止,或change the xdebug port and configure PHPStorm to use the new one。在telnet命令无法连接之前,请不要继续。
  • 现在点击PHPStorm上的监听按钮,开始监听连接。
  • ddev ssh并再次尝试telnet host.docker.internal 9000。它应该连接。如果没有,可能PHPStorm没有监听,或者没有配置为侦听端口9000? (请注意,之前的说明使用了不同的端口,如果您在v0.18.0之前使用过XDebug,则可能将PHPStorm设置为其他端口。)
  • 检查以确保已启用xdebug。您可以在容器中使用php -i,或使用您想要的任何其他技术来提供phpinfo()的输出,包括Drupal的admin / reports / status / php。您应该看到This program makes use of the Zend Scripting Language Engine...with Xdebug v2.6.0xdebug.remote_enable: On
  • 在项目的index.php的第一个相关行中设置断点,然后运行该站点。应该就此止步。
  • https://vimeo.com/268685753在实践中提供了XDebug的快速截屏概览。

来自@heddn的说明:如果你想让xdebug只为fpm运行,例如phpenmod -s fpm xdebug,而不是运行enable_xdebug

欢迎您的跟进!

答案 1 :(得分:0)

谢谢,遇到同样的问题并添加文件.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中的validating xdebug对于检查配置非常有用。