【问题标题】:Xdebug for remote server not connecting远程服务器的 Xdebug 未连接
【发布时间】:2011-12-24 09:17:45
【问题描述】:

我希望一个使用不同计算机的团队能够在 远程 服务器上调试 PHP,但我很难让 Xdebug 在 NetBeans 7.0.1 中工作。我尝试了许多在线技巧,但都无济于事。

作为记录,我已在运行 WampServer 的 Windows 7 机器上成功安装了 Xdebug 本地。所以我可以在 NetBeans 中使用断点调试 PHP,前提是我将 Project Properties->Run Configuration->Run As 属性设置为 Local Web Site .但是,如上所述,我的目标是在 远程网站 上在 NetBeans 中进行调试。

我的服务器是 Ubuntu 11.04 机器。我已经使用http://www.xdebug.org/find-binary.php 的输出将正确的二进制文件放在机器上。我已经修改了我能找到的所有php.ini 文件(在php5/apache2php5/cli 目录中)以包含这些行:

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

如果我查看phpinfo.php 网页,它会显示:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans

所以 Xdebug 似乎安装正确。不过,当我尝试在 NetBeans 中进行调试时,我会收到无休止的状态栏消息 Waiting For Connection (netbeans-xdebug)。当我点击停止按钮时,我得到 X 秒内未检测到来自 xdebug 的连接。原因可能是 xdebug 未安装或配置不正确

也许我在这里将本地设置与服务器设置混淆了? A postxdebug.remote_host 应该设置为运行 NetBeans 的机器的IP,但我希望团队能够使用具有不同 IP 地址的机器进行调试。问题可能是端口 9000,但我检查过它没有被阻塞。

任何可以澄清这一点的帮助将不胜感激!

【问题讨论】:

  • 使用xdebug.ide_key并将其设置为一些复杂的值应该用作密码iirc。
  • 多年后再次遇到此问题,该问题是由阻止运行 Xdebug 的服务器联系我的开发计算机的防火墙设置引起的(请参阅@Linus Kleen 的回答)。所以检查你的防火墙。
  • 是的,最终需要某种 NA(P)T 才能将来自开发服务器的传入外部连接转发到局域网中的计算机。

标签: php netbeans xdebug


【解决方案1】:

运行 PHP(和 XDebug)的服务器需要能够连接到您的工作站/桌面。

因此,您需要通过告诉它连接到特定 IP 地址 (xdebug.remote_host) 或自动“连接回”(xdebug.remote_connect_back) 来相应地设置服务器。不过,后者有一些安全隐患。这些是in the manual 的概述。

【讨论】:

  • 非常感谢!现在可以了!我只是将配置行 xdebug.remote_connect_back=1 添加到 php.ini 文件中。还要感谢您注意安全隐患。
  • 检查文档,xdebug.remote_host 设置似乎只接受一个地址,并且对于许多具有不同 IP 地址的团队成员,在我看来 xdebug.remote_connect_back=1 是唯一有效的设置。
  • 您可以设置多个具有专用php.ini 的虚拟主机来规避连接回问题。我们的开发部门就是这样设置的。
  • @user269867 this question 有帮助吗?
  • @ButtleButkus 简而言之,如果机器 A 需要通过端口 9000 连接到 B,但该端口被阻塞,它建立一个普通的 SSH会话并指示 SSH 客户端(在机器 A 上)本地设置端口 9000。然后通过 SSH 隧道连接到该本地端口的连接到目标机器 B。评论区已经没有多少空间了;如果您需要更多详细信息,请提出相关问题。
【解决方案2】:

您要启动什么页面扩展来开始调试?我记得我发疯了,并且在 XDebug 的所有设置都运行良好的情况下度过了不眠之夜。问题是我不是从.PHP 开始,而是从.HTML 开始。

如果您正在尝试使用 .PHP 文件开始调试。

【讨论】:

  • 我有一个 .PHTML 文件作为启动文件。 NetBeans 将其识别为 PHP 文件,至少从其图标来看。我尝试更改为 .PHP,但没有成功。不过感谢您的提示!
【解决方案3】:

关键指令是这样的:

xdebug.remote_connect_back = On

这允许网络服务器连接到任何要求调试会话的计算机。这样您就不必对 IP 地址进行硬编码,并且能够共享 Xdebug。该指令在早期版本中不存在,并且经常从教程和文档中省略。

您还需要验证每台客户端计算机是否接受到端口 9000 (xdebug.remote_port) 的传入连接。这包括配置防火墙并确保调试器客户端已启动并运行

【讨论】:

  • 谢谢。我已经阅读了很多 Xdebug 文档,但不知何故忽略了 xdebug.remote_connect_back 设置。由于 NetBeans 本身会生成带有建议的 php.ini 设置的帮助消息,因此我认为这是为这些设置找到正确值的问题,而不是添加另一个新设置行。
  • 我不得不关闭xdebug.remote_connect_back。使用 SSH 隧道,远程机器显然应该连接到它自己的端口 9000(因此xdebug.remote_port=9000xdebug.remote_host=localhost)。因此,您不希望它尝试连接到远程 ip,例如173.12.34.25:9000,但本地主机:9000。此外,remote_host 和 connect_back 选项一起使用没有意义。
【解决方案4】:

你需要设置:

xdebug.remote_host=192.168.1.104

192.168.1.104 是您使用 IDE 的客户端 IP

【讨论】:

  • 谢谢。但是,当您有多个 IP 并且希望能够连接到 Xdebug 远程服务器时,我认为这种方法不起作用。请参阅 Linus Kleen 的上述评论。
【解决方案5】:

感谢服务器端 php.ini 上的xdebug.remote_connect_back = On
我还必须使用 this plugin 让 Chrome 能够在 PhpStorm 中启动调试会话

【讨论】:

    【解决方案6】:

    对我来说,xdebug.remote_connect_back = On 不起作用。 我所做的是在我的客户端机器上设置 ssh 端口转发。

    远程机器上的xdebug配置:

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

    客户端机器上的转发端口:

    ssh -g -N -lusername -R9000:127.0.0.1:9000 [remote.host.ip]
    

    必须允许远程机器上的 shell 访问。

    【讨论】:

    • 我相信这被称为 SSH 隧道,而不是端口转发,尽管它有点相似。我认为“端口转发”通常是指面向公众的路由器,配置为根据流量用于哪个端口,将流量发送到其专用网络内的某些机器。我用它在我的家用机器上设置了一个网络服务器。端口 80 (http) 的流量会自动发送到那台机器(而不是我室友的)。
    • 太好了,这行得通,你能解释一下发生了什么吗,因为我之前使用过类似的 ssh 命令来为服务器创建代理,但那个解决方案没有用。
    【解决方案7】:

    就我而言,这些命令帮助了我:

    xdebug.remote_enable = On
    xdebug.remote_autostart=1
    

    注意:即使由于 'xdebug.remote_autostart=1' 导致 GET/POST/COOKIE 变量不存在,调试器也会工作

    【讨论】:

      【解决方案8】:

      我在尝试配置 docker 时遇到了几次同样的问题,经过多次挠头后,我意识到这是解决问题的方法。所以我决定把这个放在这里,作为我未来自己的答案。

      大多数时候 Dockerfile 将这个语句添加到 php.ini:

      xdebug.remote_connect_back     = on
      

      这将导致一切看起来都很好,但不知何故,PHP 风暴实际上没有捕获任何调试连接。用以下内容替换上面的行会立即为我解决问题。

      xdebug.remote_connect_back     = 0
      xdebug.remote_host             = host.docker.internal
      

      当然,在那之后你仍然需要运行: $ docker-compose down $ docker-compose build$ docker-compose up -d

      注意:在 Linux 上 host.docker.internal 将不起作用。您可以改用172.17.0.1。 (注意不是127.0.0.1,我一直以为是因为我有点不习惯)

      【讨论】:

      • 那个host.docker.internal bit...我现在可以吻你了。
      • 那只适用于 Mac 或 Windows,但不适用于主要使用它的 Linux……我不敢相信这种事情……这让我很生气……
      • 我尝试了我认为是 host.docker.internal (172.17.0.1) 的 ip,但没有成功;主机名确实可以!谢谢!
      • @matiaslauriti 在 linux 这对我有用:xdebug.remote_host=172.17.0.1
      • @JulesColle 仍然是不,那是你为那个 docker 分配的 ip...如果我必须与团队分享,他们将不得不输入他们的 IP...这是不-不...
      【解决方案9】:

      Xdebug 3 远程调试升级指南

      总结:https://xdebug.org/docs/upgrade_guide

      所需的 PHP 配置更改/添加:

      • 删除xdebug.(remote_enable|default_enable|profiler_enable|auto_trace|coverage_enable)
      • 添加xdebug.mode=debug或使用develop|coverage|gcstats|profile
      • 添加xdebug.start_with_request=yes
      • xdebug.remote_autostartxdebug.mode=debug 替换为 xdebug.start_with_request=yes
      • xdebug.remote_host 替换为 xdebug.client_host
      • xdebug.remote_portxdebug.client_port 替换或在 IDE 设置中使用新的默认设置(更多内容见下文)

      新配置示例

      xdebug.mode=debug
      xdebug.start_with_request=yes
      xdebug.idekey=myKey
      xdebug.client_host=x.y.z.a
      xdebug.remote_handler=dbgp
      

      在哪里

      • x.y.z.a = 您的 IDE 主机
      • myKey = 您在 IDE 中配置的密钥

      所需的 IDE 配置更改/添加:

      • 在上面的配置中将remote_port 设置为9003(xdebug 的新默认端口)或将xdebug.client_port 设置为9000 以保留旧默认值

      【讨论】:

      • 非常正确的答案;谢谢...在我的情况下,我有带 Php7.3.13、Netbeans 8.2 和 IIS 10 的 Win 10(浏览器是带有 netbeans 扩展和 FF 的 Chrome)...然后我安装了 xdebug(使用向导)并配置如下:
      • 只想在 Xdebug 3 中添加它 - 我们应该使用 xdebug.discover_client_host=1 而不是 xdebug.remote_connect_back
      • @Brad,我正在使用 PHP5.6 和 XDebug2.5.5 我的情况如何配置。你能看看stackoverflow.com/questions/70092201/…
      【解决方案10】:

      Brad 对 xdebug 3 的回答非常正确;谢谢......在我的情况下,我有 Php7.3.13 的 Win 10, Netbeans 8.2 和 IIS 10(eindia.com 是众多网站之一)(浏览器是带有 netbeans 扩展和 FF 的 Chrome)...没有 Xampp、Wampp、Lampp... 然后我安装了 xdebug(使用向导)和配置如下:

      [xDebug]
      zend_extension = "C:\Program Files\PHP\v7.3\ext\php_xdebug-3.0.2-7.3-vc15-nts-x86_64.dll"
      xdebug.mode=debug
      xdebug.start_with_request=yes
      xdebug.remote_autostart=on
      xdebug.remote_enable=on
      xdebug.remote_handler="dbgp"
      xdebug.client_host="eindia.com"
      ;xdebug.remote_host=192.168.1.5
      ;xdebug.remote_connect_back=1
      xdebug.client_port=9003
      ;xdebug.remote_mode=req
      xdebug.idekey="netbeans-xdebug"  
      

      它的工作就像魅力。

      【讨论】:

        【解决方案11】:

        如果你使用的是 xdebug 3,你需要知道一些变量被重命名了。阅读:https://xdebug.org/docs/upgrade_guide

        php.ini 配置对我有用:

        [xdebug]
        xdebug.mode=debug
        zend_extension="C:/wamp64/bin/php/php7.4.26/ext/php_xdebug.dll"
        xdebug.idekey=PHPSTORM
        xdebug.client_host= "localhost"
        xdebug.client_port=9003
        

        PHPstorm settings

        【讨论】:

          猜你喜欢
          • 2016-06-23
          • 2020-11-22
          • 2013-10-17
          • 2014-08-05
          • 1970-01-01
          • 2019-07-23
          • 2015-09-11
          • 1970-01-01
          • 2011-08-06
          相关资源
          最近更新 更多