调试 IDE 与 XDebug 的端口连接:“正在等待连接”序言设置程序

2022-08-30 15:22:14

序言

像许多人一样,我花了更多的时间来调试我的IDE与XDebug的连接,而不是使用XDebug来调试我的程序。我已经让它反复工作,但每隔一段时间我就会遇到常见的“等待连接”问题。我无法定位导致XDebug工作或失败的原因。我已经使用 ubuntu 两年了。我既不是菜鸟,也不是大师。我做错了什么?如何更好地调试 IDE 与 XDebug 的连接?


设置

  • 乌班图 10.10
  • 网豆 6.9.1
  • PHP 5.3.3-1ubuntu9 与 Suhosin-Patch
  • Xdebug v2.1.0 与 debugclient 于 2010 年 9 月 20 日使用 xdebug.org 上的定制安装说明脚本从源代码构建
  • Apache Apache/2.2.16
  • /etc/php5/apache2/php.ini 和 /etc/php5/cli/php.ini都有:
    • zend_extension = /usr/lib/php5/20090626+lfs/xdebug.so
      xdebug.remote_enable=1
      xdebug.remote_handler=dbgp
      xdebug.remote_mode=req
      xdebug.remote_host=127.0.0.1
      xdebug.remote_port=9000
      xdebug.remote_log=/var/log/xdebug.log
      xdebug.extended_info=1
      xdebug.idekey="netbeans-xdebug"
      

程序

问题

我无法解释导致问题的原因或问题何时出现。当我尝试调试我的项目时,它开始,这会导致我选择的开发浏览器(Chrome)打开到带有参数的项目的网址。这会导致页面在 chrome 中正常呈现,而 Netbeans 仅报告“正在等待连接”。XDEBUG_SESSION_START=netbeans-xdebug

调试 XDebug

首先,在“等待连接”消息仍然处于活动状态的情况下,我将尝试使用netstat在端口9000周围挖掘,如下所示:

$ netstat -an | grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN     

我关闭了我的IDE,并尝试使用两个文件来帮助弄清楚发生了什么:包含,并且包含XDebug安装检查脚本{webroot}/index.php<?php phpinfo(); ?>{webroot}/dbgtest.php

<?php
$address = '127.0.0.1';
$port = 9000;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Unable to bind');
socket_listen($sock);
$client = socket_accept($sock);
echo "connection established: $client";
socket_close($client);
socket_close($sock);
?>

当我启动 XDebug 并打开时,我通常会得到常规输出,然后验证 XDebug 是否在另一个终端中使用 netstat 连接到脚本:debugclienthttp://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession

$ netstat -an | grep 9000
tcp        0      0 127.0.0.1:9000          127.0.0.1:34831         ESTABLISHED
tcp        0      0 127.0.0.1:34831         127.0.0.1:9000          ESTABLISHED

虽然这两个似乎都表明已经建立了连接,但网页上写着“无法绑定”,我无法解释。我按 Ctrl-c 退出 debugclient,此时 netstat 验证端口 9000 没有活动。我启动了 Netbeans,打开并启用了调试器,这将打开 。然后,调试器通常会正常启动。我停止调试器,回到我的项目,这就是问题真正变得烦人的地方:有时,我可以像往常一样继续调试我的项目,而其他时候,问题再次出现,当“等待连接”标志显示时,netstat显示:{webroot}/index.phphttp://127.0.0.1/index.php

$ netstat -an | grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN     
tcp6       0      0 127.0.0.1:9000          127.0.0.1:34681         TIME_WAIT 

其他时候,我会重新启动计算机,启动终端,然后找到:

$ netstat -an | grep 9000
unix  3      [ ]         STREAM     CONNECTED     9000  
$ telnet 127.0.0.1 9000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

我对网络和linux内部不够熟悉,无法理解这是什么意思。显然,有些东西正在使用端口9000。这是什么意思?请注意,尽管我在php中进行了设置.ini:

$ cat /var/log/xdebug.log
cat: /var/log/xdebug.log: No such file or directory

调试 IDE 和 XDebug 之间连接的正确方法是什么?


答案 1

如果您偶然使用思科 VPN 客户端,这可能是一个原因。它带有防火墙,即使客户端未启动,该防火墙也始终处于打开状态。可以在“选项”菜单中取消选中它。


答案 2

请阅读此主题。

http://forums.netbeans.org/post-99369.html

最后,解决方法是将 net.ipv6.bindv6only = 0 添加到文件 /etc/sysctl.d/bindv6only.conf,然后重新启动。Xdebug在那之后工作得很好。


推荐