我跟着 Rafael Dohms's article使用NetBeans调试工具进行phpunit测试。
问题是当我在NetBeans中开始调试并使用命令行运行测试时,NetBeans从“等待连接”状态切换到“netbeans-xdebug runnig”。但是程序在“cofiguration read from ...”之后停止在命令行,并且调试操作(Step over,Step into etc)都没有激活。
我尝试禁用“在第一行停止”选项并使用调试文件进行调试,但这些都没有效果。
我是否遗漏了配置或使用NetBeans工具的内容?
更新
我尝试使用NetBeans解决问题,但它无效。最后我使用PhpStrom来调试代码,虽然我得到了相同的结果,但我成功调试了普通的CLI程序并跟踪了我的phpunit测试程序。我意识到调试冻结在“pear \ PHPUnit \ Util \ PHP.php”文件中,如下所示:
$stdout = stream_get_contents($pipes[1]);
我正在使用Windows 7和php-v5.3
答案 0 :(得分:4)
在搜索
时发现此帖子$stdout = stream_get_contents($pipes[1]);
与关键字xdebug和phpunit结合使用。
我遇到了相同的症状,phpstorm(从未尝试过netbeans)最终导致我停止这一行。
在步行到这一行的过程中,我注意到一些“进程隔离”,这使我在我的xdebug调用中删除了--process-isolation参数(这本身就是我们用来解决内存泄漏的问题)。现在不会调用bugging行,而正常的xdebug / unittest操作会继续调用
没有声称这是一个解决方案,但至少对我来说是一个可行的解决方法。也可能给实际问题/解决方案指明方向
答案 1 :(得分:0)
您需要在Web服务器上安装Xdebug,通常在端口9000上侦听。
查看此博客文章,了解如何配置Xdebug http://bogdan-albei.blogspot.co.uk/2010/06/php-remote-debugging-with-xdebug-and.html
根据你所写的内容,我认为Xdebug不起作用。
答案 2 :(得分:0)
确保您的调试设置是apache2和cli php.ini
我将以下条目添加到这两个文件中
/etc/php5/cli/php.ini
/etc/php5/apache2/php.ini
[xdebug]
zend_extension = /usr/lib/php5/20090626/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
答案 3 :(得分:0)
问题可能是在phpunit中使用 strict 模式,例如在phpunit.xml
。
由于此设置,在断点处停止会触发超时。没有严格模式,没有超时活动。
答案 4 :(得分:0)
我遇到了同样的问题但没有找到正确的解决方案,但现在我调试了我的测试用例。我希望这篇简短的“如何”对你也有帮助。
当你在浏览器中调试时,$ _SERVER超全局只有不同的东西,所以首先你需要这个。
在您的测试用例中抛出一个例外,以便进行检查:
throw new Exception(json_encode($_SERVER));
如果一切正常,那么您将在测试错误消息中看到类似的内容:
{"ALLUSERSPROFILE":"C:\ProgramData","APPDATA":"C:\User......
创建一个文件(例如名为:“phpunit-debug._SERVER.json
”)并将完整的json行复制粘贴到此文件中。
第二,你必须用这个内容制作一个“phpunit-debug.php”文件:
$_SERVER = (array) json_decode(file_get_contents("phpunit-debug._SERVER.json"));
// include your bootstrap if it's necessary...
include 'c:\xampp\php\phpunit'; // TADAA! your PHPUnit tricked and believe
// that you called by NetBeans ;) but can
// debugging with xdebug as usually
答案 5 :(得分:0)
也许事情已经发生了变化,但是在尝试了之前的每个答案后,我无法在使用Netbeans 8.1运行phpunit时从终端启动连接。充其量它只会在nb控制台中说,运行...完成。永远不要等待连接。
对我有用的是从Netbeans发起它。
以下是 Ubuntu 16.04 的一些说明,假设php和netbeans已经安装并正常工作。
安装xdebug扩展
sudo apt install php-xdebug
启用
sudo phpenmod xdebug
将环境变量添加到php.ini
或/etc/php/7.0/cli/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.idekey=netbeans-xdebug
xdebug.remote_enable= On
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
我在我的项目中需要phpunit作为composer dev依赖项,因此可执行文件位于vendor/bin/phpunit
,这是要设置为“索引文件”的文件< /强>
我使用phpunit.xml
configuration file在我的项目根文件夹中设置选项和测试套件。因此,您需要将该目录位置设置为“工作目录”,以便它获取引导程序等。