php - Docker 和 XDebug 不读取断点 VSCode

标签 php debugging docker xdebug

在过去的 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 : php storm config 1

php storm config 2

在那之后我的断点开始工作,如果你使用的是 chrome,你还需要使用 xdebug 扩展,但我很确定你知道这一点,因为你过去使用过它。

关于php - Docker 和 XDebug 不读取断点 VSCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43360282/

相关文章:

php - bootstrap 2.3 轮播中的多个图像/元素

php - 带有 JSON 正文的 POST 请求

javascript - 如何在 WooCommerce 3 中进行调试

docker - 在Docker网络中跨容器连接

azure - 更新现有 azure 注册表的镜像不起作用

php - 调用 Ajax 并返回响应

php - Paypal IPN - 如何设置自定义项目描述?

java - javax.persistence.PersistenceContext.synchronization() 中的错误

java - Android R18 更新后从调试 View 打开源代码编辑 .class

docker - 无法在 Windows 10 上安装 docker