在过去的 6 个月里,我一直在 MAC 上使用 XDebug 和 PHP 版本 7.0.*,对 Docker 容器进行远程调试。
我运行的是旧版本的 docker,它使用 VirtualBox to VM for docker,一切正常。
我最近将 docker 更新到版本 17.03.1,除了 xDebug 问题外什么都没有。我已经通过存储库中的问题联系了 vscode-php-debug 的创建者,然后他指示我通过 xdebug 和/或 docker 解决这个问题。
我的问题如下:
XDebug 正在运行并在我的容器上工作,xdebug 日志显示它连接到我的 IDE,但当我在 VSCode 中设置断点时它只是关闭连接,就好像没有断点一样。
我发在vscode-php-debug上的issue可以找到here
其中有我的 xDebug 日志和 VSCode 调试日志的副本...它显示已建立连接但没有命中断点。
我读过一些博客,说 docker 现在需要创建一个环回 ip 才能连接到 xdebug,我也尝试过但失败了。
我发现在使用调试器这么久之后,在没有调试器的情况下调试起来非常困难。
我尝试了很多配置、重新安装、重新启动、重建图像/容器,甚至在 freenode 上尝试了 docker 和 xdebug irc channel ,但都没有成功。
最佳答案
EDIT-2 2018
现在可以更改 remote_host
值以支持所有平台:
xdebug.remote_host = "host.docker.internal"
EDIT-1 2018 不再需要使用 plist 修复。正如本要点所指出的:https://gist.github.com/chadrien/c90927ec2d160ffea9c4#gistcomment-2398281您现在可以将 docker 用于 mac 内部 IP。
[xdebug]
xdebug.remote_host = "docker.for.mac.host.internal"
xdebug.default_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_port = 9000
xdebug.idekey="PHPSTORM"
旧配置
由于您在 Mac 上使用 docker,我将发布我的解决方案的工作方式。大部分学分转到this post on the docker forum .
假设您正确安装了 xdebug,这是我在 php.ini
中的配置。
[xdebug]
xdebug.remote_host=10.254.254.254
xdebug.remote_autostart=1
xdebug.idekey = PHPSTORM
xdebug.default_enable = 0
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.profiler_enable = 1
您可以通过在终端中执行此命令来测试您的配置。 sudo ifconfig en0 别名 10.254.254.254 255.255.255.0
。
如果这有效,您可以将其转换为 plist
文件并将其放置在以下位置。 /Library/LaunchDaemons/com.docker.xdebugFix.plist
。您将在下面找到我的 plist 文件版本。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.docker.xdebugFix</string>
<key>ProgramArguments</key>
<array>
<string>ifconfig</string>
<string>en0</string>
<string>alias</string>
<string>10.254.254.254</string>
<string>255.255.255.0</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
注意:plist 仅在您的 Mac 重新启动后才有效。
PHPSTORM 配置(2018 年编辑后也需要)
之后,我用这样的调试服务器设置了我的 PHP Storm :
在那之后我的断点开始工作,如果你使用的是 chrome,你还需要使用 xdebug 扩展,但我很确定你知道这一点,因为你过去使用过它。
关于php - Docker 和 XDebug 不读取断点 VSCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43360282/