PHP远程调试:XDebug无法连接JetBrains php Storm客户端

Posted

技术标签:

【中文标题】PHP远程调试:XDebug无法连接JetBrains php Storm客户端【英文标题】:PHP remote debugging: XDebug can't connect to JetBrains php Storm client 【发布时间】:2012-07-18 18:45:36 【问题描述】:

我喜欢使用以下软件配置进行远程调试:

Win 7 Pro 64 位 WAMP 服务器 2.2(32 位)包括。 Apache 2.2.22、php 5.4.3、XDebug php_xdebug-2.2.1-5.4-vc9.dll JetBrains PHPStorm 4.0.3

1.) WAMP 已启动并运行,我的站点可以在 localhost/fox/ 下找到

2.) PHP Storm 有一个项目,其中我的源文件和 apache 别名 localhost/fox 之间存在映射

2.) 我安装了 php 扩展 XDebug 并将以下几行添加到我的 php.ini

[xdebug]
zend_extension="c:/wamp/bin/php/php5.4.3/zend_ext/php_xdebug-2.2.1-5.4-vc9.dll"
xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_connect_back=On
xdebug.remote_autostart=On
xdebug.profiler_enable=On
xdebug.profiler_enable_trigger=off
xdebug.profiler_output_name=cachegrind.out.%t.%p
xdebug.profiler_output_dir="c:/wamp/tmp"
xdebug.remote_log="C:/wamp/tmp/xdebug.log"
xdebug.remote_cookie_expire_time=6000

这应该配置远程调试 XDebug 和回调地址。

我已经在这里检查了我的安装:xdebug.org/wizard.php

3.) 我配置了phpstorm,首先我添加了本地服务器

然后在这里检查我的设置

http://www.bilder-hochladen.net/files/jrn0-2-c81e-jpg-nb.html

(我也尝试将 127.0.0.1/fox 作为服务器地址,并改为使用 localhost)

继承我的调试设置: http://www.bilder-hochladen.net/files/jrn0-1-c4ca-jpg.html

现在我重启我的apache,我进入phpstorm,设置一个断点(它是红色的),点击函数

Run  -> Start listen to PHP Debug Connections

电话听筒变绿了,这究竟意味着什么,但这对我来说是一个积极的信号。

当我现在在本地网络服务器上运行我的 php 脚本时,绝对没有任何反应,程序在断点处运行并且不会停止。

在 Xdebuggers 日志 (C:/wamp/tmp/xdebug.log) 中,我发现大量此类消息:

 I: Checking remote connect back address.
 I: Remote address found, connecting to ::1:9000.
 E: Could not connect to client. :-(
 Log closed at 2012-07-19 14:21:08

我在互联网的某个地方找到了提示,Windows 防火墙可能会阻止通信,所以我将其完全关闭,但这并没有帮助。

我还尝试通过 telnet 连接到 localhost:9000,我得到了 phpstorm 的响应。

有没有人知道在哪里搜索错误或者我还能尝试什么让这些东西正常工作?

非常感谢您提前提供的帮助, 迈克尔

附言抱歉,我不能发布超过两个链接,因为我是新来的,所以没有指向 xdebug 向导的超链接。

【问题讨论】:

使用 TcpView、netstat、Process Explorer 或类似工具来验证 PhpStorm 是否正在侦听端口 9000。然后尝试使用telnet 127.0.0.1 9000 连接到它。如果 telnet 工作,XDebug 也应该工作。如果没有,那就是网络问题。 您是否使用浏览器中的 PHPStorm 小书签之一来激活调试器(或同等功能)? 嗨 CrazyCoder,我忘了提到我尝试了 telnet 并且它工作 phpstorm 正在监听。无论如何谢谢。 1) 你有xdebug.remote_connect_back=On,因此这个选项被忽略xdebug.remote_host="localhost"。 2) 我建议关注这篇文章——每次都能完美运行(首先在新的简单项目上尝试):confluence.jetbrains.net/display/WI/… "PHP Storm 有一个项目,其中我的源文件和 apache 别名 localhost/fox 之间存在映射" -- 可能问题就在这里。什么样的映射?你在哪里提供的(“设置 | PHP | 服务器”?或者可能是“设置 | 部署”?等等)? 【参考方案1】:

可能有点晚了,但是……

这里你的设置有矛盾:

xdebug.remote_host="localhost"
xdebug.remote_connect_back=On

这两个设置重叠。你的情况如何?

a) 您只想从一个来源调试您的应用程序(例如,您正在从localhost 开发和部署)。

那么你就差不多完成了:你已经定义了远程主机是localhost。注释掉 remote_connect_back 行(使用 ;

b) 您希望接受多个开发源(例如,在同一网络中调试应用程序的多台机器)。

然后remote_host 行将被覆盖,因此您可以删除或评论它。

这实际上是您当前正在运行的配置。那么,它有什么问题呢?运行此脚本检查一下:

<?
echo $_SERVER['REMOTE_ADDR'];

输出将是::1。嗯,向您的 Apache 服务器发出请求的主机是 localhost。而 Apache 正在将该名称解析为 IPv6 地址::1,这最终并没有错。但是 Xdebug 无法连接到 IPv6 地址。见:

I: Remote address found, connecting to ::1:9000.
E: Could not connect to client. :-(

所以我们的目标是让 Apache 将localhost最好解析为 IPv4 地址(在操作系统级别和 Apache 级别都不会禁用对 IPv6 的任何支持)。这可以通过在您的hosts 文件中添加下一行来实现:

127.0.0.1 localhost

这个简单的技巧就可以解决问题!现在localhost 总是最好被解析为 IPv4 地址,而::1 仍然可以完全理解。

【讨论】:

非常感谢。主机文件的诀窍是我缺少关键;) 啊,你是我的英雄。我花了最后两个小时浏览每篇互联网文章,它们都设置了 remote_connect_back。感谢您解释和拯救我的理智.. +1 很高兴它很有用。很遗憾 OP 没有将答案设置为 true 谢谢!我的 xdebug 试图连接 IPv6 地址。删除了remote_connect_back 行并且它工作了。 谢谢,很好的解释。【参考方案2】:

您可以尝试禁用 IPV6 http://support.microsoft.com/kb/929852,当您尝试连接时,我认为这是问题所在。

找到远程地址,连接到 ::1:9000。

系统正在尝试连接 IPV6,我认为 XDebug 只对 IPV4 启用。

【讨论】:

谢谢!我的 MAMP Pro 虚拟主机配置自动将 IPv6 localhost 条目 (::1) 添加到 /etc/hosts。删除它们后,xDebug 再次按预期工作!【参考方案3】:

代码中的断点到底在哪里?我知道 XDebug 很有趣。

对于 PHP 5.4,您的 Xdebug 设置应该是

[XDebug]
zend_extension="<path to php_xdebug.dll>"
xdebug.remote_enable=1
xdebug.remote_port="<the port for XDebug to listen to>" (the default port is 9000)
xdebug.profiler_enable=1
xdebug.profiler_output_dir="<AMP home\tmp>"

http://www.jetbrains.com/phpstorm/webhelp/configuring-xdebug.html

【讨论】:

xdebug.profiler_output_dir 要求什么?系统上 tmp 目录的路径?我使用的是 Ubuntu,所以也应该设置它: /tmp ? @johnsnails 将写入探查器输出的目录,确保运行 PHP 的用户对该目录具有写入权限。默认为/tmp

以上是关于PHP远程调试:XDebug无法连接JetBrains php Storm客户端的主要内容,如果未能解决你的问题,请参考以下文章

远程服务器的 Xdebug 未连接

在远程服务器上的Docker内部进行Xdebug远程调试

在 PhpStorm 中调试 CLI PHP 脚本,无法建立与 Xdebug 2.6.0 的连接

vscode调试php(解决vscode远程调试无效的问题)

使用 XDebug 进行 PHP 远程调试

远程服务器上 Docker 内的 Xdebug 远程调试