5

我按照Rafael Dohms 的文章使用 NetBeans 调试工具进行 phpunit 测试。

问题是当我在 NetBeans 中开始调试并使用命令行运行测试时,NetBeans 从“等待连接”状态切换到“netbeans-xdebug runnig”。但是程序在“从...读取配置”之后在命令行停止,并且没有任何调试操作(Step over、Step into 等)处于活动状态。

我尝试禁用“在第一行停止”选项并使用调试文件进行调试,但它们都不起作用。

我是否错过了配置或使用 NetBeans 工具中的某些内容?

更新

我尝试使用 NetBeans 解决问题,但没有奏效。最后我使用 PhpStrom 调试代码,虽然我得到了相同的结果,但我成功调试了正常的 CLI 程序并跟踪了我的 phpunit 测试程序。我意识到调试在“pear\PHPUnit\Util\PHP.php”文件中冻结,在以下行中:

$stdout = stream_get_contents($pipes[1]);

我正在使用 Windows 7 和 php-v5.3

4

6 回答 6

4

搜索线路时发现了这个帖子

$stdout = stream_get_contents($pipes[1]);

结合关键字 xdebug 和 phpunit。

我遇到了同样的症状,phpstorm(从未尝试过netbeans)最终导致我陷入停顿。

在进入这一行的过程中,我注意到一些提到“进程隔离”,这让我在我的 xdebug 调用中删除了 --process-isolation 参数(这本身就是我们用来解决内存泄漏的)。现在没有调用窃听行,正常的 xdebug/unittest 操作继续

没有声称这是一个解决方案,但至少对我来说是一个可行的解决方法。也可能为实际问题/解决方案提供一些方向

于 2016-07-27T14:00:06.410 回答
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

于 2015-03-07T21:44:55.330 回答
0

你需要在 Webserver 上安装 Xdebug,通常监听 9000 端口。

查看这篇博客文章如何配置 Xdebug http://bogdan-albei.blogspot.co.uk/2010/06/php-remote-debugging-with-xdebug-and.html

从您写的内容来看,在我看来 Xdebug 不起作用。

于 2013-07-23T10:53:01.180 回答
0

问题可能是在 phpunit 中使用严格模式,例如在phpunit.xml.

由于此设置在断点处停止会触发超时。没有严格模式,没有超时是活动的。

于 2013-12-19T18:04:29.667 回答
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
于 2013-08-16T22:55:22.360 回答
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配置文件在我的项目根文件夹中设置选项和测试套件。因此,您需要将该目录位置设置为“工作目录”,以便它获取您的引导程序等。

截图 netbeans 项目属性

于 2016-09-06T23:35:39.920 回答