Este código con PHP/Xdebug (usando Xdebug 2.2.1 y PHP 5.4 en Windows 7 x64, también he añadido un contador de líneas para facilitar la lectura):¿Qué devuelve Xdebug en PHP?
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());
..I obtener esta salida (he modificado algunos valores para que sea más legible):
array (size=1)
'..\testpage.php' =>
array (size=4)
3 => int 1
4 => int 1
7 => int 1
9 => int 1
la documentación más en el sitio de Xdebug dice:
"el valor de los elementos representa el número total de unidades de ejecución en esta línea se ha ejecutado ".
Fuente: http://www.xdebug.com/docs/code_coverage
Así que al parecer la salida es incorrecto. La línea 3 y 4 deberían haberse ejecutado tres veces, mientras que Xdebug dijo 1, respectivamente. La línea 6 debería haber sido ejecutada una vez, Xdebug no tenía un dicho en absoluto. La línea 7 definitivamente no debería haber sido ejecutada, pero Xdebug dijo que se ejecutó una vez. Se debe decir que la salida se mantiene igual con o sin llaves.
largo en la siguiente dirección: http://xdebug.org/archives/xdebug-general/0377.html
.. Derick Rethans está atrapado diciendo (hace 7 años!) Que de alguna manera la documentación está mal (y todavía es), que Xdebug sólo devuelve -1, 0 o 1 Sin embargo, como muestra mi ejemplo, Xdebug devuelve 1 directamente y el contador manipulado parece hacer que su selección sea arbitraria. Incluso si Xdebug devolviera -1, 0 o 1, no sabría lo que dicen esos valores.
Entonces, ¿alguno de ustedes codificadores de elite tiene una idea? Y si en serio hay algo malo con Xdebug aquí, ¿significa eso que no puedo confiar en otras aplicaciones y complementos utilizados para el perfil y la cobertura de código que a su vez usan Xdebug? Estoy pensando en Phing y PHPUnit, que parece ser un matrimonio común.
También si desea elaborar algo sobre este tema; si Xdebug es defectuoso y, como tal, todas las aplicaciones dependientes, ¿qué utiliza para los informes de cobertura de código en PHP?
EDITAR: La salida enumerados anteriormente utilizando el mismo ejemplo de código, no se modifica si envío argumentos XDEBUG_CC_UNUSED
o XDEBUG_CC_DEAD_CODE
como argumentos para xdebug_start_code_coverage
. Estoy empezando a pensar que Xdebug no funciona para la cobertura del código en absoluto, no en mi sistema.
Tal vez el intérprete PHP todavía tiene que leerlo y generar código nativo para él, incluso si no va a ser ejecutado? –
Cole, apuesto a que estás pensando en la línea 7 y sí, ese podría ser el caso. Pero, ¿no sería Xdebug completamente inútil si no pudiera dar cuenta de tal cosa? Y aún así, está el problema de las líneas 3, 4 y 6. –
Nunca he usado Xdebug, así que no puedo dar respuestas definitivas, pero de acuerdo con (http://www.digipedia.pl/usenet/thread/15739/ 883 /) parece que en realidad no devuelve el número de veces que se supone que se ejecutará la línea. – kennypu