Vagrant + Xdebug + Atom

Vagrant + Xdebug + Atom

我有一个安装了 xdebug 的 vagrant box,运行 在 OSX 上,但我正在努力让 Atom xdebug 插件 (php-debug) 连接到它。

我将 phpinfo(); 数据粘贴到 xdebug 验证站点,它说一切都很好。你可以看到所有的 xdebug 设置。

我在vagrant文​​件中映射了9000端口

config.vm.network :forwarded_port, guest: 9000, host: 9000

vagrant box 只有主机网络,暴露 192.168.10.100 作为服务器的 IP。

而且我已经尝试了各种不同的 xdebug 选项,ATOM 插件网站上的选项建议..

xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true

但这有点令人困惑,因为 remote_connect_back=1 意味着 xdebug 将忽略 remote_host 设置 - 所以不确定为什么两者都在那里 - 都不起作用。

每次更改选项后,我都重新启动了 apache / php,并检查它们是否加载了 phpinfo();

如果我检查谁在监听 9000 端口

COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Atom\x20H 10656 Matt   28u  IPv6 0x321cb0a96ba5b593      0t0  TCP *:cslistener (LISTEN)
VBoxHeadl 10889 Matt   19u  IPv4 0x321cb0a981a71433      0t0  TCP *:cslistener (LISTEN)

你可以同时看到vagrant(虚拟盒子)和Atom。虽然 Atom 是 IPv6 这很奇怪....

但是在 ATOM 中启用调试器,设置断点并访问站点,没有任何反应 - ATOM 永远无法连接。

有什么想法吗?有人让这个工作吗?

But that is a slightly confusing as remote_connect_back=1 means xdebug will ignore the remote_host setting

你是对的——那里不需要那个选项——最好设置为0

xdebug.remote_host=127.0.0.1

这是错误的(除非您将通过 SSH 隧道进行调试)。它必须是调试客户端(在您的情况下为 Atom)为 运行 的 IP。 连接到客户端的是 xdebug 而不是其他方式:https://xdebug.org/docs/remote

这也意味着 IP 必须是从 Vagrant 机器上看到的。可能是获得它的最简单方法——看看 $_SERVER['REMOTE_ADDR'] 有什么。

I have mapped port 9000 in the vagrant file.

config.vm.network :forwarded_port, guest: 9000, host: 9000

您不需要在 Vagrant 中公开 9000 端口——没有人会连接到它(就像您对 Web 服务器使用端口 80 所做的那样)——来自 VM/guest OS 的 xdebug 将在外部连接到您的 "real"/host OS.

如果有的话——您应该允许该端口上的传出连接而不是传入连接。

If I check who is listening on port 9000

这意味着 Atom 无法通过 TCPv4 接收传入的 xdebug 连接。默认情况下 xdebug 将尝试使用它(除非您在 xdebug.remote_host 中指定 IPv6 地址)。


如果有的话——收集 xdebug 日志 (xdebug.remote_log) 并查看它尝试连接的位置等。

@LazyOne 已经回答了这个问题,但我遇到的问题是由阻止传入流量的防病毒软件 (MCAfee) 引起的。也许这会对将来的某人有所帮助。