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

19
我想让远程调试与以下软件配置一起工作:
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

电话接收器正在变成绿色,确切意义不得而知,但对我来说这是一个积极的信号。
当我现在在本地 web 服务器上运行我的 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向导。

2
使用TcpView、netstat、Process Explorer或类似工具验证PhpStorm是否在9000端口上监听。然后尝试使用telnet 127.0.0.1 9000连接它。如果telnet正常工作,XDebug也应该可以工作。否则,可能是一些网络问题。 - CrazyCoder
  1. 你已经设置了 xdebug.remote_connect_back=On,因此选项 xdebug.remote_host="localhost" 被忽略了。
  2. 我建议您先阅读这篇文章——在新的简单项目上尝试,每次都能完美运行:http://confluence.jetbrains.net/display/WI/Zero-Configuration+debugging+with+PhpStorm+2.0
- LazyOne
好的,问题在于一个cookie让xdebug-er连接错误。没有其他解释。 - cimmx
我发现在PhpStorm和远程调试中有一个非常恶心的小问题。虽然我开发的操作系统是Linux,但我确定Windows也有同样的问题。如果您的源路径(在映射中)不是实际的真正源路径,调试器将无法在断点处停止。这在Linux中使用符号链接时很明显。如果您的项目存储在C:\Users\You\xyz下,则可以尝试将它们移动到根目录并查看是否有所帮助。这只是我的02美分。 - lucifurious
@cimmx,您有未审核的答案。 - Áxel Costas Pena
显示剩余7条评论
3个回答

13
也许有点晚了,但是...
在您的设置中存在一些矛盾:
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仍然是可理解的。


1
非常感谢。对于我来说,hosts文件的小技巧是关键所在 ;) - ikkez
3
啊,你是我的英雄。我花了最后两个小时阅读了每篇互联网文章,它们都设置了remote_connect_back。感谢您的解释并挽救了我的理智。+1 - PersyJack
很高兴它有用。遗憾的是,OP没有将答案设置为正确。 - Áxel Costas Pena
1
谢谢!我的xdebug尝试连接IPv6地址。删除了remote_connect_back行,它就可以工作了。 - tehCivilian
1
谢谢,讲解得很好。 - Haris ur Rehman

6
您可以尝试禁用IPV6http://support.microsoft.com/kb/929852,我认为这可能是连接时出现的问题。

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

系统正在尝试使用IPV6连接,而我认为XDebug仅启用IPV4。


谢谢!我的MAMP Pro虚拟主机配置会自动将IPv6本地主机条目(::1)添加到/etc/hosts中。删除它们后,xDebug再次按预期工作! - Matthias Kleine

0
你的代码中断点确切在哪里?我知道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
@johnsnails:分析器输出将写入的目录,请确保运行PHP的用户对该目录具有写权限。默认为“/tmp”。 - bear

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