【问题标题】:Vagrant + Xdebug + AtomVagrant + Xdebug + Atom
【发布时间】: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_ADDR192.168.10.1,所以请添加它并关闭 remote_connect_back 看看会发生什么......

标签: vagrant xdebug atom-editor php-ini


【解决方案1】:

但这有点令人困惑,因为 remote_connect_back=1 意味着 xdebug 将忽略 remote_host 设置

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

xdebug.remote_host=127.0.0.1

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

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

我已经在 vagrant 文件中映射了 9000 端口。

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

你不需要在 Vagrant 中暴露 9000 端口——没有人会连接到它(就像你为 web 服务器使用端口 80 一样)——它来自 VM/guest OS 的 xdebug 将在外部连接到你的“真实” /主机操作系统。

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

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

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


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2016-03-07
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多