远程服务器的 Xdebug 未连接
Posted
技术标签:
【中文标题】远程服务器的 Xdebug 未连接【英文标题】:Xdebug for remote server not connecting 【发布时间】: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/apache2
和php5/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 post 说 xdebug.remote_host
应该设置为运行 NetBeans 的机器的IP,但我希望团队能够使用具有不同 IP 地址的机器进行调试。问题可能是端口 9000,但我检查过它没有被阻塞。
任何可以澄清这一点的帮助将不胜感激!
【问题讨论】:
使用xdebug.ide_key
并将其设置为一些复杂的值应该用作密码iirc。
多年后再次遇到此问题,该问题是由阻止运行 Xdebug 的服务器联系我的开发计算机的防火墙设置引起的(请参阅@Linus Kleen 的回答)。所以检查你的防火墙。
是的,最终需要某种 NA(P)T 才能将来自开发服务器的传入外部连接转发到局域网中的计算机。
【参考方案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=9000
和xdebug.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_autostart
被 xdebug.mode=debug
替换为 xdebug.start_with_request=yes
xdebug.remote_host
替换为 xdebug.client_host
xdebug.remote_port
被 xdebug.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 我的情况如何配置。你能看看***.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
【讨论】:
以上是关于远程服务器的 Xdebug 未连接的主要内容,如果未能解决你的问题,请参考以下文章