除了使用@runTestsInSeparateProcesses外,Xdebug断点始终有效吗?

时间:2017-07-26 16:09:11

标签: laravel netbeans phpunit xdebug netbeans-8

我终于让Xdebug工作(包括断点和“跳过”的能力)进行单元测试,功能测试,以及在浏览器中进行探索。

但是,每当我因@runTestsInSeparateProcesses而使用this reason时,Netbeans断点就不再起作用了。

如何在使用@runTestsInSeparateProcesses的测试中使用Xdebug断点?

我在Windows 10版本1607 Build 14393.0上使用Netbeans 8.2。 PHPUnit 5.7.21。

我正在运行Laravel 5.4 Homestead(这是Vagrant 1.9.5),这意味着我的服务器是Ubuntu 16.04.2 LTS(GNU / Linux 4.4.0-66-generic x86_64)。

1 个答案:

答案 0 :(得分:2)

你需要将xdebug配置添加到你的php.ini中,这样如果phpunit再次调用php-interpreter(b / c为@runTestsInSeparateProcesses)在一个单独的进程中运行测试就会加载并具有xdebug自动激活(远程调试设置等),没有传递给可执行文件的任何其他参数。

如果您已经这样做了(可能不是您的问题),请确保您的IDE接受多个xdebug连接(xdebug连接限制或类似)。这是必要的,因为新的PHP进程将启动一个需要额外连接的新xdebug远程会话。如果未满足该连接,xdebug将等待连接限制为一(1),例如,您将看到PHP挂起。

这种方法的缺点是xdebug将被加载总是会加上ca.在CLI中执行的PHP的性能为10%。

就开发框而言,您可以自己创建一些脚本,以便为已安装的PHP二进制文件打开和关闭xdebug默认配置。

Composer不受此影响,因为它会在禁用xdebug的情况下重新启动,但大多数其他PHP cli工具都不会这样做(也许不需要它,因为有太多可用的性能而且缺点是被忽略了。对于那些进行大量对象创建的PHP脚本来说,这一点非常重要。

所以,设置你的php.ini并启用xdebug。一个好的IDE会显示它自动添加的设置(PHP cli -d选项),只需将这些设置添加到php.ini中,您就应该适合该测试场景。

当你开始工作时,考虑如何动态禁用设置(sed对于这一点非常方便,尤其是在GNU系统上-i [编辑到位],Stackoverflow应该让你对于基础知识感到满意,对于Windows,我不能说什么效果很好,如果你想知道的话。

补充说明:我不能特别说Netbeans,因为我不使用它,但是使用Phpstorm这是完全相同的(我真诚地假设),因为它在调用测试时将xdebug添加到PHP配置中(除非我将添加的xdebug配置添加到php.ini中,否则无法调试导致其他PHP脚本的生成子流程,调试,覆盖)和衍生子流程。