6

PHP / Xdebugを使用したこのコード(Windows 7x64でXdebug2.2.1とPHP5.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は一度実行されたと述べています。中括弧の有無にかかわらず、出力は同じままであると言わなければなりません。

このURLで: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_UNUSEDまたはXDEBUG_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 マニュアルのEdge Casesを参照してください。

およびその他のSOの質問:

于 2012-09-25T07:23:52.287 に答える