使用PHPStorm进行PHPUnit xdebug远程调试的故障排除

4

我正在尝试使Xdebug远程调试工作,我的IDE是PHPStorm。 我的Web服务器/代码托管在远程机器(Amazon EC2)上。

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

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在Web服务器端按预期运行?我如何在不使用Phpstorm的情况下测试我的Xdebug设置?我不知道是我家庭网络和远程服务器之间的连接问题还是其他什么问题。

任何帮助缩小问题范围的指导都将是很棒的。


最近我尝试在调试前从本地笔记本电脑创建一个ssh隧道到远程服务器的9000端口,但似乎仍然无法工作(我将设置xdebug.remote_host更改为环回地址127.0.0.1)。有什么建议吗? - user712850
我会启用xdebug日志记录,并使用tcpdump查看是否建立了连接,然后为PhpStorm启用调试日志记录:http://devnet.jetbrains.net/docs/DOC-1202。尝试使用零配置方法进行操作:http://blog.jetbrains.com/webide/2011/02/zero-configuration-debugging-with-xdebug-and-phpstorm-2-0/。 - CrazyCoder
5个回答

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

我的解决方案主要基于Rafael Dohms在他的博客文章中提供的解决方案: 使用XDebug在NetBeans中调试PHPUnit测试

环境

  • IDE: PHPStorm 6.0.2
  • 服务器: WAMP Server (32-bit & 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

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

PHPStorm

首先,您必须创建一个“服务器配置”(在主题上搜索“Creating a Server Configuration - JetBrains”获取官方文档),并将“Xdebug”指定为“调试器”。
然后,在“配置”部分下指定以下值,创建新的“PHP远程调试配置”(在主题上搜索“Creating and Editing Run/Debug Configurations - JetBrains”获取官方文档):
  • 服务器:上面创建的服务器
  • Ide密钥:PHPSTORM
现在,选择那个配置并按下“Debug”按钮(或“Shift + F9”)。 PHPStorm将显示“Debug”面板并显示消息:等待使用ide密钥“PHPSTORM”的传入连接 最后,“运行”您的PHPUnit测试。有几种方法。其中之一是:
  • 右键单击 PHPUnit 测试所在的文件名。
  • 选择“运行 文件名”。

就这样!XDebug 将从这里接管。


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

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

这样做,我至少能够收集到一些信息:当我通过php-cli或通过命令行上的'phpunit'运行php文件时,会在xdebug日志中放置条目。但是当我通过phpstorm远程运行测试时,虽然可以获得测试结果,但没有添加任何条目到xdebug日志中。尽管如此,我仍然无法解决这个问题。 - user712850

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

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

通常使用端口80和Xdebug。在这里,验证远程环境至关重要。

在调试下,您可以设置调试端口,如果将其更改为9001,请在php.ini中进行更改,并选择可以接受外部连接。

如果您不启用开始侦听PHP调试连接,则无法使其工作(位于右上角或运行菜单中的图标)。

在“编辑配置”中,您必须定义一个PHP Web应用程序才能在运行菜单中使用调试。

我花了一天时间让它工作。主要问题是编辑错误的php.ini(不要忘记在编辑后重新启动apache),以及xdebug与php版本不兼容。

正如您所看到的,我在我的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

祝你比我更快地成功。


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