NetBeans调试不适用于phpunit测试

时间:2013-07-22 08:53:02

标签: php netbeans phpunit xdebug

我跟着 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

6 个答案:

答案 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已经安装并正常工作

  1. 安装xdebug扩展

    sudo apt install php-xdebug
    
  2. 启用

    sudo phpenmod xdebug
    
  3. 将环境变量添加到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
    
  4. 我在我的项目中需要phpunit作为composer dev依赖项,因此可执行文件位于vendor/bin/phpunit,这是要设置为“索引文件”的文件< /强>

  5. 我使用phpunit.xml configuration file在我的项目根文件夹中设置选项和测试套件。因此,您需要将该目录位置设置为“工作目录”,以便它获取引导程序等。

  6. screenshot netbeans project properties