6

这段代码带有 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());

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

array (size=1)
  '..\testpage.php' => 
    array (size=4)
      3 => int 1
      4 => int 1
      7 => int 1
      9 => int 1

Xdebug 网站上的文档说:

“元素中的值表示该行已执行的执行单元总数。”

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

所以显然输出是错误的。第 3 行和第 4 行应该执行了 3 次,而 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 根本不适用于代码覆盖,而不是在我的系统上。

4

1 回答 1

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());

产生:

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

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

和其他问题:

于 2012-09-25T07:23:52.287 回答