2017-07-26 37 views
1

我终于得到了Xdebug的工作(包括断点和“跨越”的能力),用于单元测试,功能测试以及在浏览器中浏览。除了使用@runTestsInSeparateProcesses之外,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)。

回答

2

您需要将xdebug配置添加到您的php.ini中,这样如果phpunit再次调用php解释器(b/c of @runTestsInSeparateProcesses)在单独的进程中运行测试,则会自动激活xdebug(远程调试设置等),而没有任何其他参数传递给可执行文件。

如果您已完成此操作(可能不是您的问题),请确保您的IDE正在接受多个单一的xdebug连接(xdebug连接限制或类似)。这是必要的,因为新的PHP进程将启动需要额外连接的新xdebug远程会话。如果连接没有完成,xdebug将等待连接限制为1(1),您将看到PHP挂起。

这种方法的缺点是,xdebug将永远加载,这将增加约。在CLI中执行PHP 10%的性能。

只要这是在开发框中,您可以创建一些脚本,您可以运行该脚本来为已安装的PHP二进制文件打开和关闭xdebug默认配置。

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

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

当你得到它的工作,思考如何在飞行中禁止设置(sed是非常方便的是,尤其是-i [编辑在地方]在GNU系统,#1应该让你高兴的基础在这里, Windows我不能说什么工作得很好,万一你想知道)。

附加说明:我不能具体说Netbeans,因为我没有使用它,但是与Phpstorm的情况完全相同(我假设是真诚的),因为它在调用测试时将xdebug添加到PHP配置中(调试,覆盖)以及导致其他PHP脚本的子进程无法调试,除非我将该添加的xdebug配置放入php.ini

+0

谢谢。我会继续前进+1并接受这个答案,因为它看起来像你知道你在说什么。我会阅读并稍后尝试。谢谢! – Ryan

+1

不要接受它(或以后不接受它),除非它回答了*你的问题。我可能只是一个好的谈话者,但你的问题可能会有所不同。只是说。 ;) – hakre