Php 调试IDE';s端口与XDebug的连接:“0”;“等待连接”; 序言

Php 调试IDE';s端口与XDebug的连接:“0”;“等待连接”; 序言,php,netbeans,ide,xdebug,netstat,Php,Netbeans,Ide,Xdebug,Netstat,和许多人一样,我花在调试IDE与XDebug的连接上的时间比用XDebug调试程序的时间要多我已经让它反复工作了,但偶尔我会得到一个普通的。我无法本地化导致XDebug工作或失败的原因。我已经使用ubuntu两年了;我既不是noob也不是strace大师。我做错了什么?如何更好地调试IDE与XDebug的连接 安装程序 Ubuntu 10.10 Netbeans 6.9.1 PHP 5.3.3-1ubuntu9和Suhosin修补程序 2010年9月20日从源代码使用 Apache/2.2.

和许多人一样,我花在调试IDE与XDebug的连接上的时间比用XDebug调试程序的时间要多我已经让它反复工作了,但偶尔我会得到一个普通的。我无法本地化导致XDebug工作或失败的原因。我已经使用ubuntu两年了;我既不是noob也不是strace大师。我做错了什么?如何更好地调试IDE与XDebug的连接


安装程序
  • Ubuntu 10.10
  • Netbeans 6.9.1
  • PHP 5.3.3-1ubuntu9和Suhosin修补程序
  • 2010年9月20日从源代码使用
  • Apache/2.2.16
  • /etc/php5/apache2/php.ini和/etc/php5/cli/php.ini都有:
    • 我关闭IDE并尝试使用两个文件来帮助了解发生了什么:
      {webroot}/index.php
      包含
      ,而
      {webroot}/dbgtest.php
      包含:

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

      $ 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之间的连接的正确方法是什么?嗯,我的开发设置与您的有所不同,但我非常清楚这个问题。事实上我刚刚解决了。。。这次我的Fireeall阻止了XDebug用来与我的IDE通信的端口

      在阅读您的帐户时,我想到了一些事情:

      1) “我无法解释问题的原因或问题出现时的原因” 这是一个非常重要的声明b/c,我们都知道,技术解决方案严格取决于潜在问题是否总是或有时以看似随机的方式出现。所以您有时能这样执行XDebugging吗

      2) 当您的IDE正在等待并且您的浏览器立即呈现站点时,我猜您的IDE告诉您的XDebug服务器启动是有问题的。B/c如果XDebug将启动并且无法连接回XDebug客户端,则网站将不会立即呈现。但是在您的例子中,GET参数只是被忽略了b/c,它们对Apache/PHP服务器没有任何意义,因为它们不知道您想要启动的某个XDebug会话

      3) 我觉得你的解决方法很复杂。我会先尽量保持简单,然后看看它是如何工作的。例如,“xdebug.idekey=“netbeans xdebug”通常不是第一次安装所必需的

      那是我的两分钱

      最好的
      Raffael

      如果您碰巧使用了Cisco VPN客户端,这可能是一个原因。它带有防火墙,即使客户端未启动,防火墙也会一直打开。
      可以在选项菜单中取消选中它。

      请阅读此线程


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

      Sidenote,尽管您的问题似乎在这里没有完全解决:我一直在使用假vhosts(添加到hosts文件以解析为127.0.0.1)并在相同服务器名/别名的apache vhosts上进行调试,它与Xdebug的作用类似。确保设置正确性的一个设置是项目属性-->源-->Web根目录和源-->项目URL/索引文件,以便浏览器的/Index.php对应于Xdebug所期望的内容。我有一个小问题,这是一个令人眼花缭乱的问题很明显:未安装xdebug。NetBeans默认假定存在xdebug,但从不检查。因此,如果其他NetBeans新手遇到此问题,请首先检查:)有趣-当我再次调查xdebug时,我必须检查此问题;当我这样做时,我会将答案标记为正确(因为我发布了此消息,所以我没有使用xdebug).哇,我已经工作了几个小时,这解决了我的问题,谢谢!
      $ 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
      
      $ 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
      
      $ cat /var/log/xdebug.log
      cat: /var/log/xdebug.log: No such file or directory