Xdebug 断点总是有效,除非使用@runTestsInSeparateProcesses?

Xdebug breakpoints always work except when using @runTestsInSeparateProcesses?

我终于让 Xdebug 开始工作(包括断点和 "step over" 的能力)以进行单元测试、功能测试以及在浏览器中四处闲逛。

但是,每当我使用 @runTestsInSeparateProcesses because of this reason 时,Netbeans 断点不再起作用。

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

我在 Windows 10 版本 1607 内部版本 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-泛型 x86_64).

您需要将 xdebug 配置添加到您的 php.ini 以便如果 php 单元再次调用 php-解释器(b/c of @runTestsInSeparateProcesses) 运行 加载单独进程中的测试并自动激活 xdebug(远程调试设置等)w/o 传递给可执行文件的任何其他参数。

如果您已经这样做了(您的问题可能不是这种情况),请确保您的 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 [就地编辑],Whosebug 应该让你对这里的基础知识感到满意,因为 Windows 我不能说什么是好的,以防你想知道)。

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