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) 引起的。也许这会对将来的某人有所帮助。
我有一个安装了 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 theremote_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) 引起的。也许这会对将来的某人有所帮助。