PhpStorm:“运行覆盖”导致“无法加载Xdebug - 扩展已加载”

时间:2018-03-20 19:14:17

标签: phpunit phpstorm

我刚刚将我的PhpStorm项目从PHPUnit 4.x升级到PHPUnit 5.x.运行我的单元测试工作正常。

为了让“运行覆盖”工作,我必须编辑我的运行/调试配置并将--whitelist=/path/to/whitelisted/dir添加到Test Runner选项。现在,当我选择“Run with coverage”时会生成覆盖范围,但是我得到了这个Xdebug警告。

Testing started at 12:06 PM ...
/usr/local/opt/php56/bin/php -dzend_extension=/usr/local/opt/php56-
xdebug/xdebug.so -dxdebug.coverage_enable=1 
/Users/bwood/code/php/WpsConsole/vendor/phpunit/phpunit/phpunit --
whitelist=/Users/bwood/code/php/WpsConsole/src --coverage-clover /Users/bwood/Library/Caches/PhpStorm2017.3/coverage/WpsConsole$NEW.coverage --no-configuration /Users/bwood/code/php/WpsConsole/tests/UnitTests --teamcity

Cannot load Xdebug - extension already loaded
PHPUnit 5.7.27 by Sebastian Bergmann and contributors.

我认为问题在于用

调用php
-dzend_extension=/usr/local/opt/php56-xdebug/xdebug.so

但我无法弄清楚我可以删除该选项的位置。我正在测试一个控制台应用程序,因此没有Web服务器配置。

2 个答案:

答案 0 :(得分:2)

我有两个不同的问题导致了同样的情况。 (我的话说已经装了两次)。

第一个是上述PHPStorm中的调试器扩展字段。我解决了这个问题,但仍然有问题。

所以我跑了:

<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="polyfills.js">
</script>
<script type="text/javascript" src="scripts.js">
</script>
<script type="text/javascript" src="vendor.js">
</script><script type="text/javascript" src="main.js"></script>

由于所有这些文件都在同一基本目录中,因此我进入了/ usr / local / etc / php

>php --ini

Cannot load Xdebug - it was already loaded
Configuration File (php.ini) Path: /usr/local/etc/php/7.2
Loaded Configuration File:         /usr/local/etc/php/7.2/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.2/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.2/conf.d/ext-opcache.ini

这表明问题出在我的php.ini文件中。出于某种原因,我将其放在php.ini文件的顶部。

$:/usr/local/etc/$ grep -r 'xdebug' .
./php/7.2/php.ini:zend_extension="xdebug.so"
./php/7.2/php.ini:zend_extension="xdebug.so"

我删除了其中一行,警告消失了!

答案 1 :(得分:1)

检查PhpStorm中的PHP Interpreter - xdebug扩展名有一个单独的字段。它允许你不要在实际的php.ini中加载xdebug(这样普通的脚本执行会更快)并且只在需要时加载xdebug(调试/覆盖)。

根据您的信息到目前为止,您已经在php.ini和那里。 建议的解决方案是将其从该字段中删除。

enter image description here

P.S。显然,它只适用于CLI的东西,而且不会以任何方式影响基于浏览器的调试(因为它是运行PHP的Web服务器,因此IDE无法在那里传递这样的参数)。