Questo codice con PHP/Xdebug (utilizzando Xdebug 2.2.1 e PHP 5.4 su Windows 7 x64, anche io ho aggiunto un contatore di linea per migliorare la leggibilità):Cosa restituisce Xdebug in 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());
..Io ottenere questa uscita (ho modificato alcuni valori per renderlo più leggibile):
array (size=1)
'..\testpage.php' =>
array (size=4)
3 => int 1
4 => int 1
7 => int 1
9 => int 1
la documentazione sopra presso la sede del Xdebug dice:
"il valore negli elementi rappresenta il numero totale di unità di esecuzione su questa linea è stata eseguita. "
Fonte: http://www.xdebug.com/docs/code_coverage
Quindi a quanto pare l'uscita è sbagliato. Le linee 3 e 4 dovrebbero essere state eseguite tre volte mentre Xdebug diceva 1 rispettivamente. La riga 6 avrebbe dovuto essere eseguita una volta, Xdebug non aveva affatto un proverbio. La riga 7 non dovrebbe essere stata eseguita, tuttavia Xdebug ha detto che è stato eseguito una volta. Va detto che l'output rimane lo stesso con o senza parentesi graffe.
corso a questo indirizzo: http://xdebug.org/archives/xdebug-general/0377.html
.. Derick Rethans 'colto dicendo (7 anni fa!) Che in qualche modo la documentazione è sbagliato (e ancora è), che restituisce solo Xdebug -1, 0 o 1 Tuttavia, come mostra il mio esempio, Xdebug restituisce 1 dritto e il contatore truccato sembra rendere arbitraria la sua selezione. Anche se Xdebug restituisse -1, 0 o 1, non saprei dire cosa dicono questi valori.
Quindi, qualcuno di voi programmatori d'élite ha un'idea ?? E se c'è davvero qualcosa di sbagliato in Xdebug, vuol dire che non posso fidarmi di altre applicazioni e plugin usati per la profilazione e la copertura del codice che a loro volta usano Xdebug? Sto pensando a Phing e PHPUnit che sembra essere un matrimonio comune.
Inoltre se avete voglia di elaborare alcuni su questo problema; se Xdebug è difettoso e come tale, tutte le applicazioni dipendenti, che cosa usi per i report sulla copertura del codice in PHP?
EDIT: L'uscita elencati sopra utilizzando lo stesso esempio di codice, è invariato se invio argomenti XDEBUG_CC_UNUSED
o XDEBUG_CC_DEAD_CODE
come argomenti a xdebug_start_code_coverage
. Sto iniziando a pensare che Xdebug non funzioni affatto per la copertura del codice, non sul mio sistema.
Forse il parser PHP ha ancora di leggerlo e di generare codice nativo per esso anche se non sarà eseguito? –
Cole, scommetto che stai pensando alla linea 7 e sì, potrebbe essere il caso. Ma Xdebug non sarebbe completamente inutile se non fosse in grado di spiegare una cosa del genere? E ancora, c'è il problema delle linee 3, 4 e 6. –
Non ho mai usato Xdebug quindi non posso dare risposte certe, ma secondo (http://www.digipedia.pl/usenet/thread/15739/ 883 /) sembra che in realtà non restituisca il numero di volte che la linea deve essere eseguita. – kennypu