NetBeans XDEBUG远程主机无限期等待连接

2022-04-25 00:00:00 nginx php xdebug netbeans php-5.6

我正在尝试将XDEBUG配置到我的NetBeans IDE,它显示为等待连接。我已经花了两天时间,但没有找到任何线索。

  • 我正在使用SFTP连接从NetBeans IDE连接到远程服务器中的代码,连接成功。
  • 我的远程服务器是安装了CENT OS 7的虚拟机。
  • 我的应用程序配置了nginx、PHP-fpm、PHP 5.6。

我已经在服务器上安装了xdebug-2.5.5,并在php.ini中添加了以下内容:

zend_extension=/apps/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_autostart=0
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_mode="req"
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey="netbeans-xdebug"
;xdebug.remote_connect_back=1
xdebug.profiler_enable_trigger=0
xdebug.remote_log="/mypath/xdebug.log"

我已交叉检查xdebug.so位于我上面提到的正确路径中。

在我的NetBeans中,工具>;>;选项>;>;PHP&>;>;调试:

Debugging port:  9000
Session ID: netbeans-xdebug

在NetBeans IDE中开始调试时,我看到以下日志:

Log opened at 2021-11-24 07:11:45
I: Connecting to configured address/port: localhost:9000.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///myserver/location/path/index.php" language="PHP" xdebug:language_version="5.6.14" protocol_version="1.0" appid="4643" idekey="netbeans-xdebug"><engine version="2.5.5"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2017 by Derick Rethans]]></copyright></init>
    
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="break" reason="ok"><xdebug:message filename="file:///myserver/location/path/index.php" lineno="13"></xdebug:message></response>
    
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
    
Log closed at 2021-11-24 07:11:45

并且在NetBeans IDE中,等待连接的";将无限期地保持加载。

我正在寻找一些帮助,以了解这上面有什么问题。我没有使用任何Docker和PhpStorm。期待得到一些帮助。


解决方案

您说&我的远程服务器是一台安装了CENT OS 7的虚拟机,但您有xdebug.remote_host=localhost

XDEBUG是连接到IDE的程序,而不是连接到IDE的程序。如果您的代码运行在另一台服务器上(另一台物理机或在VM或某个容器内),则xdebug.remote_host应指向运行您的IDE的计算机(可以解析为该IP的IP地址或域名;从该服务器可以看到)。当然,除非您正在对Xdebug连接使用反向SSH隧道。

现在,您正在通过TCP9000端口连接到服务器上的某些服务。它极有可能是php-fpm(它也使用该端口:这是XDebugv3将默认端口更改为9003BTW的原因之一)。您的XDEBUG日志非常短:知道XDEBUG如何工作的服务的典型响应就是关闭会话。Php-fpm就可以做到这一点。

所以有几点建议:

  • 要确保只有XDEBUG使用此端口:在php.ini和NetBeans中将XDEBUG端口更改为另一个数字(例如9001或更好的9003,以便它将与XDEBUG v3兼容)。之后不要忘记重新启动您的Web服务器/php-fpm(使用phpinfo();检查实时设置)。

  • 如果未使用反向SSH隧道,则将xdebug.remote_host设置为拥有包含NetBeans的机器的IP。通常,该IP与$_SERVER['REMOTE_HOST']中看到的IP相同。

    注意:由于这将是一个传入连接,因此您的本地操作系统、服务器和路由器(如果它位于您的局域网之外)上的防火墙可以阻止此类连接。因此,您需要确保可以在本地计算机上的XDEBUG端口上接收传入连接。

相关文章