调试 IDE 到 XDebug 的端口连接:“Waiting to Connect”

Posted

技术标签:

【中文标题】调试 IDE 到 XDebug 的端口连接:“Waiting to Connect”【英文标题】:Debugging IDE's port connection to XDebug: "Waiting to Connect" 【发布时间】:2011-04-26 16:41:00 【问题描述】:

序言

与许多人一样,我在调试 IDE 与 XDebug 的连接上所花费的时间比使用 XDebug 调试程序所花费的时间还要多。 我已经让它反复工作,但每隔一段时间我就会得到常见的“Waiting to connect” problem。我无法定位导致 XDebug 工作或失败的原因。我已经使用 ubuntu 两年了;我既不是菜鸟也不是 strace 大师。 我做错了什么?如何更好地调试 IDE 与 XDebug 的连接?


设置

Ubuntu 10.10 Netbeans 6.9.1 带有 Suhosin 补丁的 php 5.3.3-1ubuntu9 带有调试客户端的 Xdebug v2.1.0 于 2010 年 9 月 20 日从源代码中构建,使用 tailored installation instructions script on 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) 使用参数XDEBUG_SESSION_START=netbeans-xdebug 打开我的项目的 url。这会导致页面在 chrome 中正常呈现,而 Netbeans 仅报告“等待连接”。

调试 XDebug

首先,在“等待连接”消息仍然存在的情况下,我将尝试使用 netstat 挖掘端口 9000,它类似于这样:

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

我关闭了我的 IDE 并尝试使用两个文件来帮助弄清楚发生了什么:webroot/index.php 包含 <?php phpinfo(); ?>webroot/dbgtest.php 包含 XDebug installation check script:

<?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 debugclient 并打开 http://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession 时,我通常会得到 regular output,然后在另一个终端中使用 netstat 验证 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

虽然这两个似乎都表明已建立连接,但网页显示“无法绑定”,我无法解释。我 Ctrl-c 退出 debugclient,此时 netstat 验证端口 9000 没有活动。我启动 Netbeans,打开 webroot/index.php 并使用调试器,它打开了 http://127.0.0.1/index.php。然后调试器通常会正常启动。我停止调试器,回到我的项目,这就是问题真正令人烦恼的地方:有时,我可以继续正常调试我的项目,而其他时候,问题再次出现,而“Waiting to连接”标志显示,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 内部结构不够熟悉,看不出这意味着什么。很明显 something 正在使用端口 9000。这是什么意思?请注意,尽管我在 php.ini 中进行了设置:

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

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

【问题讨论】:

旁注,尽管您的麻烦似乎在这里并不完全适用:我一直在使用假虚拟主机(添加到主机文件以解析为 127.0.0.1)并在相同服务器名称/别名的 apache 虚拟主机上进行调试,它就像 Xdebug 的魅力一样。确保您已设置属性的设置是 Project Properties --> Sources --> Web Root 和 Sources --> Project URL/Index File,以便您的浏览器的 /index.php 对应于 Xdebug 所期望的。跨度> 我遇到了一个类似的问题,而且非常明显:未安装 xdebug。 NetBeans 默默地假定 xdebug 存在,它从不检查。因此,如果其他一些 NetBeans 新手也遇到此问题,请先检查一下 :) 【参考方案1】:

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

【讨论】:

【参考方案2】:

请阅读此主题。

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

最后解决方法是将 net.ipv6.bindv6only = 0 添加到文件 /etc/sysctl.d/bindv6only.conf 中,然后重新启动。之后 Xdebug 运行良好。

【讨论】:

有趣 - 当我再次调查 XDebug 时,我必须检查一下;完成后我会将答案标记为正确(因为我发布了这个我没有使用 XDebug)。 哇,我已经工作了好几个小时,这解决了我的问题,谢谢!【参考方案3】:

好吧,我的开发设置与您的有些不同,但我非常了解这个问题。事实上我刚刚解决了它......这次我的 Fireeall 阻止了 XDebug 用来与我的 IDE 通信的端口。

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

1) “我无法解释导致问题的原因或问题何时出现。” 这是一个非常重要的陈述 b/c,众所周知,技术解决方案严格取决于潜在问题总是或有时以看似随机的方式发生。那么...您有时可以以这种方式执行 XDebugging,还是永远不可以?

2) 当您的 IDE 正在等待并且您的浏览器立即呈现该站点时,我猜您的 IDE 告诉您的 XDebug-server 启动有问题。 B/c 如果 XDebug 将启动并且无法连接回您的 XDebug 客户端,则该网站不会立即呈现。但是在您的情况下,GET-parameters 只是被忽略 b/c 它们对您的 Apache/PHP-server 没有任何意义,因为它们对您想要启动的某些 XDebug-session 一无所知。

3) 你的解决方法对我来说似乎很复杂。我会先尽可能简单,看看它是如何工作的。例如 "xdebug.idekey="netbeans-xdebug" 通常不需要第一次设置。

这是我的两分钱

最好的 拉斐尔

【讨论】:

以上是关于调试 IDE 到 XDebug 的端口连接:“Waiting to Connect”的主要内容,如果未能解决你的问题,请参考以下文章

PhpStorm+Xdebug配置单步调试PHP

PHP 设置调试工具XDebug PHPStorm IDE

设置调试工具XDebug PHPStorm IDE

Visual Studio Code IDE + Docker实现PHP Xdebug调试

php下的Debug的调试

Minikube 与 PhpStorm 和 Xdebug