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

时间:2022-10-06 09:50:06

i's like to get remote debugging to work with the following software configuration:

我想通过以下软件配置进行远程调试:

Win 7 Pro 64bit WAMP Server 2.2 (32bit) incl. Apache 2.2.22, PHP 5.4.3, XDebug php_xdebug-2.2.1-5.4-vc9.dll JetBrains PHPStorm 4.0.3

Win 7 Pro 64位WAMP Server 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 is up and running, my site can be found under localhost/fox/

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

2.) PHP Storm has a project where there is a mapping between my sourcefiles and the apache alias localhost/fox

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

2.) I installed the php extension XDebug and added the following lines to my php.ini

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

This should configure the Remote Debugging XDebug and the call back address.

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

I check already my installation here: xdebug.org/wizard.php

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

3.) I configured phpstorm, first i added the local server

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

and then checked my settings here

然后在这里检查我的设置

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

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

( i tried 127.0.0.1/fox as Server address as well, and localhost instead)

(我也试过127.0.0.1/fox作为服务器地址,而不是localhost)

hier my debug settings: http://www.bilder-hochladen.net/files/jrn0-1-c4ca-jpg.html

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

Now i restart my apache, i go into phpstorm, set a break point (it is red), click the function

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

Run  -> Start listen to PHP Debug Connections

The telephone receiver is turing into green, what ever that exactly could mean but it's a positiv signal to me.

电话接收器正在变成绿色,这究竟是什么意思,但它对我来说是一个正面的信号。

When I now run my php Script on the local webserver absolutley nothing happens, the programm runs over the break point and does not stop.

当我现在在本地webserver absolutley上运行我的php脚本没有任何反应时,程序运行在断点上并且不会停止。

In the Xdebuggers log (C:/wamp/tmp/xdebug.log) i find loads of these messages like these:

在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

Somewhere in the internet i found the hint, that the windows firewall could block the communication so i turned it off completley but that did not help.

在互联网的某个地方,我发现了暗示,Windows防火墙可以阻止通信,所以我把它关闭完整但但没有帮助。

I also tried to connect via telnet to localhost:9000 and i got a response from phpstorm.

我也尝试通过telnet连接到localhost:9000,我得到了phpstorm的回复。

Has anybody an idea where to search the error or what else i could try to get this stuff working ?

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

Thank you very much for your help in advance, Michael

迈克尔,非常感谢你的帮助

p.s. Sorry i am not allowed to post more than two links because I am new here, so therefor no hyperlink to the xdebug wizard.

附:抱歉,我不允许发布两个以上的链接,因为我是新来的,因此没有指向xdebug向导的超链接。

3 个解决方案

#1


12  

Maybe a bit late but...

也许有点晚了......

Here you have a contradiction on your settings:

在这里,您的设置存在矛盾:

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

Those two settings overlap. What is your case?

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

a) You want to debug your application just from one single origin (for example, you are developing from and deploying to localhost).

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

Then you are almost done: you have already defined that the remote host is localhost. Comment out the remote_connect_back line (with ;)

然后你几乎完成了:你已经定义了远程主机是localhost。注释掉remote_connect_back行(带;)

b) You want to accept multiple development sources (for example, several machines debugging the application in the same network).

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

Then the remote_host line is being overriden, so you can remove or comment it.

然后正在覆盖remote_host行,因此您可以删除或注释它。

This is effectively the configuration you are currently running. So, what's wrong with it? Check it out running this script:

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

<?
echo $_SERVER['REMOTE_ADDR'];

The output will be ::1. Well, the host which is making the request to your Apache server is localhost. And Apache is resolving that name as the IPv6 address ::1, which in the end is not wrong. But Xdebug is unable to connect to an IPv6 address. See:

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

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

So our goal will be to make Apache to resolve localhost preferably to an IPv4 address (without disabling any support for IPv6 at OS level nor at Apache level). This may be achieved by adding to your hosts file the next line:

因此,我们的目标是让Apache优先将localhost解析为IPv4地址(不会在OS级别或Apache级别禁用任何IPv6支持)。这可以通过向您的hosts文件添加下一行来实现:

127.0.0.1 localhost

This simple hack will do the trick! Now localhost will always preferably be resolved as an IPv4 address, while ::1 will still be perfectly understandable.

这个简单的黑客将成功!现在localhost总是最好被解析为IPv4地址,而:: 1仍然是完全可以理解的。

#2


6  

You can try to disable IPV6 http://support.microsoft.com/kb/929852, I think this is the problem, when you try to connect.

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

Remote address found, connecting to ::1:9000.

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

System are try to connect with IPV6 and I think that XDebug are only enable to IPV4.

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

#3


0  

Where exactly is your breakpoint in your code? I know that XDebug can be funny.

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

For PHP 5.4, your Xdebug settings should be

对于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

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

#1


12  

Maybe a bit late but...

也许有点晚了......

Here you have a contradiction on your settings:

在这里,您的设置存在矛盾:

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

Those two settings overlap. What is your case?

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

a) You want to debug your application just from one single origin (for example, you are developing from and deploying to localhost).

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

Then you are almost done: you have already defined that the remote host is localhost. Comment out the remote_connect_back line (with ;)

然后你几乎完成了:你已经定义了远程主机是localhost。注释掉remote_connect_back行(带;)

b) You want to accept multiple development sources (for example, several machines debugging the application in the same network).

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

Then the remote_host line is being overriden, so you can remove or comment it.

然后正在覆盖remote_host行,因此您可以删除或注释它。

This is effectively the configuration you are currently running. So, what's wrong with it? Check it out running this script:

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

<?
echo $_SERVER['REMOTE_ADDR'];

The output will be ::1. Well, the host which is making the request to your Apache server is localhost. And Apache is resolving that name as the IPv6 address ::1, which in the end is not wrong. But Xdebug is unable to connect to an IPv6 address. See:

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

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

So our goal will be to make Apache to resolve localhost preferably to an IPv4 address (without disabling any support for IPv6 at OS level nor at Apache level). This may be achieved by adding to your hosts file the next line:

因此,我们的目标是让Apache优先将localhost解析为IPv4地址(不会在OS级别或Apache级别禁用任何IPv6支持)。这可以通过向您的hosts文件添加下一行来实现:

127.0.0.1 localhost

This simple hack will do the trick! Now localhost will always preferably be resolved as an IPv4 address, while ::1 will still be perfectly understandable.

这个简单的黑客将成功!现在localhost总是最好被解析为IPv4地址,而:: 1仍然是完全可以理解的。

#2


6  

You can try to disable IPV6 http://support.microsoft.com/kb/929852, I think this is the problem, when you try to connect.

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

Remote address found, connecting to ::1:9000.

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

System are try to connect with IPV6 and I think that XDebug are only enable to IPV4.

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

#3


0  

Where exactly is your breakpoint in your code? I know that XDebug can be funny.

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

For PHP 5.4, your Xdebug settings should be

对于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

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