NetBeans显示“等待连接(netbeans-xdebug)”

73

我需要帮助配置xdebug,以便从IDE netbeans中调试项目。

这些是我的组件特性:

XAMPP 1.8.2

PHP:5.4.16

netbeans:7.3.1

Apache:2.4.4(Win32)

这是我的php.ini文件的最后一部分:

 [XDebug]
 zend_extension = "C:\xampp\php\ext\php_xdebug-2.2.3-5.4-vc9-nts.dll"
 ;xdebug.profiler_append = 0
 ;xdebug.profiler_enable = 1
 ;xdebug.profiler_enable_trigger = 0
 xdebug.profiler_output_dir = "C:\xampp\tmp"
 ;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
 xdebug.remote_enable = 1
 xdebug.remote_handler = "dbgp"
 xdebug.remote_host = "127.0.0.1"
 ;xdebug.trace_output_dir = "C:\xampp\tmp"

当我运行phpinfo()函数时,没有安装xdebug,而当我从netbeans调试一个项目时,它显示“等待连接(netbeans-xdebug)”。

有人能帮我进行配置吗?


PHP错误日志或Apache日志中有任何错误吗?似乎PHP没有注册扩展,这就是为什么Netbeans无法连接的原因。 - Jon
你好,感谢回复。我该如何在NetBeans中注册扩展? - pasluc74669
当我运行phpinfo()时,它显示xdebug未安装.. 为什么? - pasluc74669
PHP日志或Apache日志中是否有任何错误?它们应该有助于诊断为什么xdebug未在PHP中注册。 - Jon
刚刚解决了!!!我下载了正确版本的xdebug,现在它可以正常工作了。感谢您的回复!!! - pasluc74669
2
我花了一点时间来调试,最终发现问题是当NetBeans启动Xdebug时,它会转到HTTP://LOCALHOST?XDEBUG_SESSION_START=netbeans-xdebug,而有一个htaccess文件干扰了重定向。因此将主机更改为HTTP://LOCALHOST/index.php可以使其正常工作。所以HTTP://LOCALHOST/index.php?XDEBUG_SESSION_START=netbeans-xdebug。 - ToughPal
25个回答

121

你已经解决了这个问题吗?如果没有,那么请尝试以下方法。

1.) php.ini 文件内容

[xDebug]
zend_extension = "c:\xampp\php\ext\php_xdebug-2.2.3-5.4-vc9.dll"
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
;xdebug.remote_host="localhost:81"
xdebug.remote_host=192.168.1.5
;xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_mode=req
xdebug.idekey="netbeans-xdebug"

xdebug.remote_host=192.168.1.5 - 这是我的系统的IPv4地址,我将其更改为此地址,因为我无法使用localhost127.0.0.1进行调试。

在NetBeans IDE中,打开工具->选项->PHP->调试。调试器端口和会话ID的值应与php.ini中指定的端口和idekey匹配。

现在保存php.ini,重新启动Apache并尝试进行调试。

谢谢Johnson


2
非常有用的答案!我搜寻了3个小时。 "xdebug.remote_host=192.168.1.5 - 这是我的系统IPv4地址,因为我无法使用localhost和127.0.0.1进行调试而更改。" 这是解决方案。我使用Win 7专业版。 - Neffets
3
这对我也适用,只需将xdebug.remote_host设置为127.0.0.1即可。 - Theramax
3
这个配置很不错。虽然我注释掉了IP地址更改,只留下了本地主机名,但效果很好。我觉得我只需要设置一下IDEKEY。 - Metropolis
6
为了让这个解决方案生效,我不得不重新启动Netbeans。 - Jérôme Verstrynge
1
@JérômeVerstrynge 哈哈,你让我开心了。我花了一个小时来寻找问题所在,但唯一有用的方法就是重新启动NetBeans。谢谢!!!!!! - Mladen
显示剩余6条评论

11

当Netbeans启动调试会话时,它会启动两个监听器,一个在0.0.0.0:9000上(系统拥有的所有IPv4 IP),另一个在IPv6接口上。

如果Netbeans和Web服务器在同一系统上,则理想情况下,XDebug应该配置为将数据发送回127.0.0.1:9000,NetBeans将在此侦听(仅每个会话)...

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_autostart=0
xdebug.remote_connect_back=0
如果由于某种原因 XDebug 无法向 127.0.0.1 报告,或者 Netbeans 不在侦听 127.0.0.1,您可以配置 XDebug 将数据发送回原始请求的$_SERVER['REMOTE_ADDR']...
xdebug.remote_connect_back=1

这样您就不需要指定准确的IP地址(即在上面的答案中的LAN IP:192.168.1.5)。这种方法的缺点是任何源都可以连接。

如果您还遇到问题,这...

xdebug.remote_autostart=1

这也将启动对所有请求的调试过程,而不仅仅是具有正确会话启动查询或cookie的请求。缺点在于所有请求都将启动调试数据收集和报告返回(使一切变慢,并生成更多数据)。

尽管从我收集到的信息来看,在Windows上(使用XAMPP、Wamp-Server等)大多数“Waiting For Connection (netbeans-xdebug)”问题通常是由于Windows防火墙和McAfee(或其他防火墙和反病毒软件)阻止连接所致……

来源:Netbeans“Waiting For Connection (netbeans-xdebug)”问题


使用“xdebug.remote_connect_back=1”对我来说并没有解决问题。 - Jaime Montoya
如果任何人仍然遇到问题,请检查正在侦听的端口。对我来说,Netbeans尽管设置为在9000上侦听,但实际上并没有。它显示它在不同的端口上侦听,但在关闭后仍然没有。更改Netbeans调试器端口设置和xdebug.remote_port为全新的端口可以解决问题 :) - Jacek Dziurdzikowski

6

我是一名.Net程序员,对PHP非常陌生。最近,我尝试在我的电脑(Windows)上托管一个开源的PHP应用程序。经过5-6天的努力,我将列出为我工作的步骤。

我卸载了之前安装的所有XAMPP和NetBeans,并进行了全新的安装。

这可能不是每个人的解决方案,但对我有效,希望能帮到某些人。

  1. 安装XAMPP

  2. 安装适用于PHP的NetBeans。

  3. 打开IIS并停止它。默认情况下,它在80端口运行。(我正在80端口上运行XAMPP,即默认设置。在其他端口上运行可能需要额外的配置设置)

  4. 打开XAMPP控制面板并启动Apache。如果端口80空闲,则不会出现问题。

  5. 在浏览器中打开localhost,应该会显示XAMPP首页。

  6. 在左侧窗格中打开phpinfo()链接,并复制页面上的所有内容。 转到:http://xdebug.org/wizard.php,将所有内容粘贴到文本框中,然后单击“Analyze my phpinfo output”。它将显示适合您配置的Xdebug文件。

  7. 下载给定的Xdebug dll并将其复制到C:\xampp\php\ext(Xampp是默认的Xampp安装目录)

  8. 进入XAMPP控制面板,单击Apache前面的Config按钮,然后选择php.in

  9. 找到类似或完全相同的行,

;zend_extension = "C:\xampp\php\ext\php_xdebug.dll"

(分号表示已注释)

删除分号并用刚刚复制的dll路径替换路径,如下所示:

zend_extension = "C:\xampp\php\ext\php_xdebug-2.3.2-5.4-vc9.dll"
  1. 同样地找到以下两行:

    ;xdebug.remote_enable = 0 ;xdebug.remote_handler = "dbgp"

去掉这两行前面的分号,并将 remote_enable = 1

xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
  1. 重启Apache服务器。

  2. 将您的网站代码复制到C:/XAMPP/htdocs/(your_website)/下,这意味着您的index.php应该在C:/XAMPP/htdocs/(your_website)/index.php中。

  3. 打开Netbeans,选择新项目->PHP->从现有源创建PHP项目,并选择刚刚复制到htdocs文件夹中的文件夹。将其设置为在本地Web服务器上运行。

  4. index.php的第一行设置断点并进行调试。

就是这样了。

各种不同的帖子都建议进行其他设置,但是上述步骤对我来说完美地解决了问题。


4

我想在这里提到一些关于xdebug.remote_host的内容。

xdebug.remote_host="127.0.0.1"

不是有效的。在某些情况下可能有效,但引号也可能会引起问题。大多数人在使用带引号的IP地址时没有问题,但这会树立一个不好的先例。这会让人们认为,如果要使用主机名或URL,就需要将其放在引号中。这是不正确的,带引号的URL将无法工作。

如果您想使用URL进行调试,只需在等号后面输入URL即可,如下所示:

xdebug.remote_host=subdomain.mydomain.com

我还想提一下,如果有端口号,请勿添加。以下方式无法正常工作:
xdebug.remote_host=subdomain.mydomain.com:9000

这就是你想要做的:

xdebug.remote_host=subdomain.mydomain.com
xdebug.remote_port=9000

如果你这样做,我也提醒你确保remote_connect_back已禁用。像这样:

xdebug.remote_connect_back=0

或者您可以完全省略它,像这样:
;xdebug.remote_connect_back=1

如果启用了remote_connect_back,它会尝试从传入连接中提取您的IP地址,并忽略remote_host和port设置。
Xdebug使用普通的TCP进行连接。这不是HTTP。这意味着像Fiddler这样的工具将不会显示任何调试数据或信息。如果您需要调试并查看服务器是否调用了您的IDE,则有几种方法可以检查。
Wireshark将允许您查看TCP流量。此外,如果您使用Windows,则Microsoft Message Analyzer也可以监视TCP。
但是,如果您只是想消除IDE可能导致的远程调试问题,我建议您启动本地TCP服务器。
这是一个很棒的免费Java程序,可用于启动TCP服务器:http://sockettest.sourceforge.net/

How to start a TCP Server

在IP地址部分,只需列出127.0.0.1或将其保留为0.0.0.0。然后列出端口号,通常默认为9000用于xdebug。
一旦TCP服务器运行,打开带有xdebug_break();函数调用的远程网页。这将告诉远程服务器上的xdebug在您的php.ini中列出的任何服务器和端口上开始调试。
观察套接字服务器并查看是否连接。发送的第一个数据应该类似于以下内容:
<init appid="APPID"
      idekey="IDE_KEY"
      session="DBGP_COOKIE"
      thread="THREAD_ID"
      parent="PARENT_APPID"
      language="LANGUAGE_NAME"
      protocol_version="1.0"
      fileuri="file://path/to/file">

如果您已经到达这一步,远程调试正在运行!只需停止服务器并设置IDE以侦听该端口即可!
如果你和我们大多数人一样,你的开发机器是在一个带有NAT路由器后面的。这意味着你办公室中的每个人都拥有相同的公共IP地址。这是一个问题,因为当xdebug联系该IP地址开始调试时,它会命中路由器,而不是你的计算机。路由器可以配置以将某些端口号传递给单个计算机,但你可能不想这样做,因为该端口将保持打开状态,直到你将路由器设置更改回来。
另一个选择是使用SSH。这里有一个很好的示例:http://stuporglue.org/setting-up-xdebug-with-netbeans-on-windows-with-a-remote-apache-server/#attachment_1305 我首选的选项是使用Ngrok。Ngrok是一个用于重定向http、https和TCP流量的好工具。为了使用TCP重定向功能,你需要注册一个免费帐户。
一旦你注册了一个帐户,并将API密钥添加到你的计算机上,请在你的IDE所在的计算机上运行此命令:
ngrok tcp 9000

这将会打开一个TCP隧道(不是HTTP),从ngrok服务器到你运行命令的机器。我正在使用9000端口,如果你的IDE配置了不同的Xdebug端口,你可以更改此端口。
你应该看到以下内容:

Ngrok tcp tunnel open

您需要查看已打开的TCP隧道的URL。在此示例中,它是:

0.tcp.ngrok.io:14904

对于本次会话,您的服务器上的Xdebug设置应该是这样的:

xdebug.remote_host=0.tcp.ngrok.io
xdebug.remote_port=14904

URL和端口会在每次启动ngrok时更改。如果你想要相同的URL和端口,必须升级到付费账户。确保在修改php.ini后重新启动Apache。

3

我刚刚花了好几个小时阅读了这个页面和其他类似的页面上的很多答案,但没人提到最终对我有效的解决方法:

确保所有三个位置中选择的端口设置匹配

我的问题是选择的端口需要在三个位置上匹配。其中两个位置显示为9001,而另一个位置显示为9000。我将它们全部改为了9000。

这就是问题所在,也是Netbeans只会显示“等待连接(netbeans-xdebug)”的原因。

这三个端口设置位置分别是:

  • php.ini (xdebug.remote_port=9000)
  • 项目属性 > 运行配置 > 高级
  • Netbeans > 工具 > 选项 > PHP > 调试

“项目属性”在哪里? - Geoff
@Geoff 在您的“项目”面板/窗口/框架中(可能已经可见,但也可以通过“窗口 > 项目”打开),右键单击您的项目并选择属性。如果我的答案和评论对您有帮助,我将不胜感激 :-) - Ryan
“项目属性”中的端口是9001。我将其设置为9000,但它仍然会恢复到9001,所以我将其他端口设置为9001,但连接仍然无法建立。 - Geoff
@Geoff 你看到了什么错误信息,或者你经历了什么?你证明了你编辑的php.ini实际上是这种情况下使用的吗?例如,有时会使用一个用于CLI(命令行)的'php.ini',而另一个用于其他情况。你可以在StackOverflow上发布一个带有大量细节的问题,然后在这里链接它,以便我可以看到它。 - Ryan
我使用xampp控制面板访问php.ini(它在c:\ xampp \ php \ php.ini中)。如果我从目录编辑它,那么它是同一个文件。错误消息与此帖子的标题相同,即“等待连接(netbeans-xdebug)”。我将发布一个问题。[链接](https://stackoverflow.com/questions/46227257/netbeans-xdebug-waiting-for-connection-despite-going-through-all-forum-answers) - Geoff
谢谢你的帮助。我最终解决了问题。请查看我之前评论中的链接。 - Geoff

2
如果您使用的是最新版本的Xdebug,则尝试此设置,因为旧版本语法已更改。请参阅https://xdebug.org/docs/upgrade_guide进行升级指南。
xdebug.mode=debug
xdebug.start_with_request = Yes
    ;xdebug.mode=profile
    ;xdebug.start_with_request=trigger
    xdebug.client_host = "localhost"
    xdebug.client_port = 9003
    xdebug.remote_handler = "dbgp"
    xdebug.log = "C:\xampp\tmp\xdebug\xdebug.log"
    xdebug.trace_output_dir = "C:\xampp\tmp"

2

请检查“Windows”防火墙设置。

对我来说,它没有起作用,因为我的局域网被声明为“公共网络”。 在我将其切换为“工作网络”后,它正常工作了。


1
我正在使用Windows和xampp,已更改php.ini文件中的[XDebug]部分(在底部)为以下内容,以使其正常工作:
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

这里的内容来自Netbeans维基:http://wiki.netbeans.org/HowToConfigureXDebug

如果你正在运行Apache,请在配置完XDebug并保存php.ini后记得重启它。


1
在正确设置了php.ini文件、NetBeans、路由器端口转发之后,我仍然遇到了可恶的“等待连接(netbeans-xdebug)”问题。最终我注意到了NetBeans页面上的提示:“不要忘记在你的php.ini文件中将output_buffering = Off”。所以我检查了/etc/php/7.x/apache2/php.ini文件,确实它的值是4096。然后我将output_buffering重置为Off,然后它就起作用了!!!希望这对某个人有所帮助,因为该消息意味着这是一个连接错误而不是配置错误。

1

在我的情况下,如果我在php ini中添加以下内容,它不起作用。

zend_extension_ts="C:\PHP\PHP560\ext\php_xdebug-2.4.0rc4-5.6-vc11.dll"

但是如果我添加

zend_extension="C:\PHP\PHP560\ext\php_xdebug-2.4.0rc4-5.6-vc11.dll"

它正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接