使用PHPStorm解决PHPUnit xdebug远程调试问题

时间:2012-03-22 01:28:34

标签: php xdebug remote-debugging phpstorm

我正在尝试让Xdebug远程调试工作,我使用PHPStorm作为我的IDE。 我的网络服务器/代码托管在远程机器上(amazon ec2)。

我的远程服务器上的php.ini中有以下几行(PHP CLI,因为我正在进行PHPUnit调试)

zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000

由于我正在从家庭网络进行编程,因此我在个人路由器上打开了端口9000。 我将PHPStorm的xdebug服务器设置为指向端口80上的远程服务器,使用Xdebug作为调试器。

现在,当我尝试从PHPStorm调试PHPUnit测试时,它只是说 '等待与ide键'12115'的传入连接 除此之外,它每次都会选择一个随机的ide键(我希望PHPUnit能够在服务器上设置idekey)

我一直试图让这个工作超过10个小时,我已经尝试在php.ini中定义我的特定remote_host而不是使用remote_connect_back但是这也没有用。我试过在php.ini中设置一个idekey,但是效果不好。

有没有确认Xdebug在网络服务器端按预期工作?如何在不使用Phpstorm的情况下测试我的Xdebug设置,我不知道它是我的家庭网络和远程服务器之间的连接问题还是什么。

任何有助于缩小问题范围的指导都会很棒。

5 个答案:

答案 0 :(得分:5)

我知道这个问题有点陈旧,但由于我遇到了同样的问题并且找到了解决方案,我决定在这里发帖给任何感兴趣的人。

  

我的解决方案主要基于Rafael Dohms提供的解决方案   他的博客文章名为:Debugging PHPUnit Tests in NetBeans with XDebug

环境

  • IDE:PHPStorm 6.0.2
  • 服务器:WAMP服务器(32位和PHP 5.4.3)2.2E
  • XDebug:2.2.2

的XDebug

zend_extension=c:\wamp\bin\php\php5.4.3\ext\php_xdebug-2.2.2-5.4-vc9.dll
xdebug.extended_info=1
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=c:/wamp/tmp/xdebug/xdebug_remote.log
  

以上配置参数进入" php.ini" CLI的文件。对于默认的WAMP安装,此文件的完整路径为: C:\ wamp \ bin \ php \ php5.4.3 \ php.ini

PHPStorm

首先,您必须创建一个"服务器配置" (google"创建服务器配置 - JetBrains"关于该主题的官方文档)指定" Xdebug"作为"调试器"。

然后,创建一个新的" PHP远程调试配置" (谷歌"创建和编辑运行/调试配置 - JetBrains"关于该主题的官方文档)在"配置"下指定以下值。部分:

  • 服务器:上面创建的服务器
  • Ide键:PHPSTORM

现在,选择该配置并按" Debug"按钮(或" Shift + F9")。 PHPStorm将显示​​" Debug"面板并显示消息:等待使用ide键的传入连接' PHPSTORM'

最后,"运行"你PHPUnit测试。有几种方法。其中之一是:

  • 右键单击PHPUnit测试所在文件的名称。
  • 选择"运行文件名"

那就是它! XDebug将从此处获得控制权。

答案 1 :(得分:1)

如果您正在运行Xdebug 2.2.0RC1,则远程调试日志(http://xdebug.org/docs/all_settings#remote_log)将告诉您连接尝试成功和失败。这可能会确定问题是在Xdebug方面还是在phpstorm方面。

答案 2 :(得分:0)

在我的情况下,问题是我在/etc/php/fpm/php.ini中有xdebug配置,但php-cli使用/etc/php/cli/php.ini

答案 3 :(得分:0)

由于我花了一天的时间才开始工作,我将总结一下,学到了什么:

确保,您正在更改正确的php.ini,XAMPP使用的是另一个php.ini和php版本,而不是预装在OS X Mavericks上的版本。

定义一个日志文件,如果没有写入任何内容,则更改错误的php.ini

在phpstorm中,如果您正在使用正确的php.ini或者仍然存在错误,您可以验证您的服务器连接并获得洞察力。

您必须更改调试设置(可能值得将端口更改为9001),服务器,所有都在phpstorm首选项和设置。

你必须设置php语言级别和解释器(使用你的Apache mysql php配置使用的那个),例如/ Application / XAMPP / xamppfiles / bin,单击...查看Php以及是否附加调试器。您可能必须使用另一版本的xdebug。

在服务器中,您必须将主机定义为

http://yourdefinitionofprojectonlocalhost

通常使用Port 80和Xdebug。这里必须验证远程环境。

在调试下你可以设置调试端口,如果你把它改成9001,也可以在php.ini中修改它,选择Can Accept external Connections。

如果你没有启用Start来监听PHP Debug Connection,你就没有希望让它运行起来(在运行菜单的右上角或向下的图标)。

在编辑配置中......你必须定义一个PHP Web应用程序才能在运行菜单中使用Debug。

我花了一天时间让它上班。主要问题是编辑错误的php.ini(编辑后不要忘记重启apache)以及xdebug无法使用php版本的事实。

正如你所看到的,我在我的php.ini中尝试了很多选项,最后在我的mamp目录中找到了xdebug的版本:

;zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
zend_extension="/Applications/MAMP/bin/php/php5.5.10/lib/php/extensions/no-debug-non-   zts-20121212/xdebug.so"

[xdebug]
;xdebug.var_display_max_children = 999
;xdebug.var_display_max_data = 99999
;xdebug.var_display_max_depth = 100
;xdebug.remote_enable = 1
;xdebug.remote_port=9001
;xdebug.profiler_enable=1
xdebug.remote_connect_back=0
;xdebug.remote_handler=dbgp
;xdebug.remote_host=localhost
;xdebug.profiler_output_dir=/Users/mypath/tmp
xdebug.remote_log=/Users/mypath/xdebug.log
;xdebug.remote_mode=req

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9001

祝你比我更快成功。

答案 4 :(得分:0)

就我而言,当我将端口更改为9000以外的端口时,它开始工作。 phpstorm的phpunit命令现在为:/usr/bin/php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9002 -dxdebug.remote_host=10.0.2.2 /var/www/application/vendor/phpunit/phpunit/phpunit --bootstrap /var/www/application/tests/Bootstrap.php --configuration /var/www/application/tests/phpunit.xml <testfile> --teamcity