PHP中的Xdebug返回什么?

Mar*_*son 6 php code-coverage xdebug

这段代码使用PHP/Xdebug(在Windows 7 x64上使用Xdebug 2.2.1和PHP 5.4,我也添加了一个行计数器以便于阅读):

1: xdebug_start_code_coverage();
2:
3: for ($ii = 0; $ii < 3; ++$ii)
4:    $x = time();
5:
6: if (false)
7:    echo "Never executed.";
8:
9: echo var_dump(xdebug_get_code_coverage());
Run Code Online (Sandbox Code Playgroud)

..我得到这个输出(我修改了一些值,使其更具可读性):

array (size=1)
  '..\testpage.php' => 
    array (size=4)
      3 => int 1
      4 => int 1
      7 => int 1
      9 => int 1
Run Code Online (Sandbox Code Playgroud)

Xdebug网站上的文档说:

"元素中的值表示此行上已执行的执行单元总数."

资料来源:http://www.xdebug.com/docs/code_coverage

显然输出是错误的.第3行和第4行应该执行三次,而Xdebug分别执行1次.第6行应该执行一次,Xdebug完全没有说法.第7行肯定不会被执行,但Xdebug说它确实执行了一次.应该说输出在有或没有花括号的情况下保持不变.

在这个网址:http://xdebug.org/archives/xdebug-general/0377.html

.. Derick Rethans被抓住说(7年前!),不知何故文档是错误的(现在仍然是),Xdebug只返回-1,0或1.但是,正如我的例子所示,Xdebug直接返回1并且被操纵的计数器似乎使他的选择任意.即使Xdebug确实返回-1,0或1,我也不知道这些值是什么.

所以,你们中的任何一位精英编码员都有自己的想法?如果Xdebug在这里出现严重问题,这是否意味着我不能相信任何其他用于分析和代码覆盖的应用程序和插件,而这些应用程序和代码覆盖又使用Xdebug?我在想Phing和PHPUnit似乎是一个普通的婚姻.

如果你想在这个问题上详细阐述一下; 如果Xdebug有问题,所有依赖的应用程序,您在PHP中使用什么代码覆盖率报告?

编辑:如果我发送参数XDEBUG_CC_UNUSEDXDEBUG_CC_DEAD_CODE作为参数,上面列出的输出使用相同的代码示例xdebug_start_code_coverage.我开始认为Xdebug根本不适用于代码覆盖,而不适用于我的系统.

wil*_*ler 4

我知道使用带有缩进语法的条件时存在问题。

XDebug 只知道“语句”,实际上并不理解“行”,尽管它是这样显示和讨论的。

这:

1  <?php
2
3  xdebug_start_code_coverage();
4
5  for ($ii = 0; $ii < 3; ++$ii) {
6     $x = time();
7  }
8 
9  if (false) {
10    echo "Never executed.";
11 }
12 
13 echo var_dump(xdebug_get_code_coverage());
Run Code Online (Sandbox Code Playgroud)

产生:

array(1) {
  ["./test.php"]=>
  array(5) {
    [5]  => int(1)
    [6]  => int(1)
    [7]  => int(1)
    [9]  => int(1)
    [13] => int(1)
  }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:PHPUnit 手册中的边缘情况

和其他问题: