【发布时间】:2017-02-15 16:30:56
【问题描述】:
我有一个安装了 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 永远不会连接。
有什么想法吗?有谁让这个工作?
【问题讨论】:
-
你从哪里得到这些指示的?有具体的手册吗? xdebug 的一般工作方式似乎存在误解。
-
2)
xdebug.remote_host=127.0.0.1-- 这是错误的(除非您将通过 SSH 隧道进行调试)。它必须是运行调试客户端(在您的情况下为 Atom)的 IP。它是 xdebug 连接到客户端,而不是其他方式:xdebug.org/docs/remote 3) 这也意味着 IP 必须是从那台 Vagrant 机器上看到的。最简单的获取方式——查看$_SERVER['REMOTE_ADDR'] -
4) 这也意味着你不需要在 Vagrant 中暴露 9000 端口——没有人会连接到它(就像你为 web 服务器使用端口 80 一样)——它是来自 VM/ 的 xdebug来宾操作系统将在外部连接到您的“真实”/主机操作系统。如果有的话 - 它应该允许该端口上的传出连接而不是传入连接。 5) “如果我检查谁在监听 9000 端口” 这意味着 Atom 无法通过 TCPv4 接收传入的 xdebug 连接 .. xdebug 默认会尝试使用该连接
-
6) 如果有的话 - 收集 xdebug 日志 (
xdebug.remote_log) 并查看它尝试连接的位置等。 -
感谢@LazyOne - 我没有意识到 xdebug 连接到客户端,而不是相反。说得通。
REMOTE_ADDR是192.168.10.1,所以请添加它并关闭remote_connect_back看看会发生什么......
标签: vagrant xdebug atom-editor php-ini