View Issue Details

IDProjectCategoryView StatusLast Update
0001540XdebugCode Coveragepublic2019-08-26 12:37
Reportertheoboldt Assigned To 
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
PlatformLinuxOSUbuntuOS Version16.04.1
Product Version2.6.0 
Target Version2.8.0devFixed in Version2.8.0beta2 
Summary0001540: Multiline class instantiate within method call is not covered when using php-fpm
Description

When instantiating a class within a method call and the variables for the new object are passed in separate lines, the lines containing the parameters are not marked as covered when php is executed by FPM. The lines are marked as covered as expected when the same file is executed via CLI using same php/xdebug version.


//TEST
class A {
public function b($a, $b, $c, $d) {
return new B(
$a,
$b,
$c,
$d
);
}
}

class B {
public function __construct($a, $b, $c, bool $d) { }
}

xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
$a = new A();
$b = $a->b(
'a',
'b',
'c',
'd'
);
$coverage = xdebug_get_code_coverage();
xdebug_stop_code_coverage();

//EVALUATE (not part of proof)
print_r(
[
'phpversion(\'xdebug\')' => phpversion('xdebug'),
'phpversion()' => phpversion(),
'php_sapi_name()' => php_sapi_name()
]
);
print_r($coverage);

When executing above code via CLI, following output is generated:


Array
(
[phpversion('xdebug')] => 2.6.0
[phpversion()] => 7.0.28-0ubuntu0.16.04.1
[php_sapi_name()] => cli
)
Array
(
[/intproj/users/erik/xdebug_coverage_issues/multiline_class_instantiate.php] => Array
(
[11] => 1
[12] => 1
[13] => 1
[14] => 1
[15] => 1
[21] => 1
[25] => 1
[26] => 1
[27] => 1
[28] => 1
[29] => 1
[30] => 1
[32] => 1
)
)

When executing above code via Apache 2 (Server API: FPM/FastCGI, PHP API: 20151012, PHP Extension: 20151012) the output differs significantly for line 12, 13, 14, 15:


Array
(
[phpversion('xdebug')] => 2.6.0
[phpversion()] => 7.0.28-0ubuntu0.16.04.1
[php_sapi_name()] => fpm-fcgi
)
Array
(
[/intproj/users/erik/xdebug_coverage_issues/multiline_class_instantiate.php] => Array
(
[11] => 1
[12] => -1
[13] => -1
[14] => -1
[15] => -1
[21] => 1
[25] => 1
[26] => 1
[30] => 1
[32] => 1
)
)

Steps To Reproduce

Execute provided snipped via php-fpm and via cli as well, compare results

TagsPHP7
Operating Systemubuntu0.16.04.1
PHP Version7.0.25-7.0.29

Relationships

has duplicate 0001541 closedderick switch/case case is not covered when using php-fpm php 7.0 

Activities

theoboldt

2018-11-15 10:54

reporter   ~0004723

Still reproducible using xdebug 2.6.1.

theoboldt

2018-12-06 15:27

reporter   ~0004751

Reproducible also having opcache disabled:
{code}
Array
(
[phpversion('xdebug')] => 2.6.0
[phpversion()] => 7.0.32-0ubuntu0.16.04.1
[php_sapi_name()] => fpm-fcgi
)
Array
(
[/intproj/users/erik/multiline_class_instantiate.php] => Array
(
[11] => 1
[12] => -1
[13] => -1
[14] => -1
[15] => -1
[17] => -2
[21] => 1
[25] => 1
[26] => 1
[30] => 1
[32] => 1
)
)
{code}

theoboldt

2018-12-06 15:33

reporter   ~0004752

Last edited: 2018-12-28 09:06

Also reproducible using php 7.2:

opcache enabled:
{code}


Array
(
[phpversion('xdebug')] => 2.6.0
[phpversion()] => 7.2.10-0ubuntu0.18.04.1
[php_sapi_name()] => fpm-fcgi
)
Array
(
[/intproj/users/erik/multiline_class_instantiate.php] => Array
(
[11] => 1
[12] => -1
[13] => -1
[14] => -1
[15] => -1
[21] => 1
[25] => 1
[26] => 1
[30] => 1
[32] => 1
)
)
{code}

opcache disabled:
{code}


Array
(
[phpversion('xdebug')] => 2.6.0
[phpversion()] => 7.2.10-0ubuntu0.18.04.1
[php_sapi_name()] => fpm-fcgi
)
Array
(
[/intproj/users/erik/multiline_class_instantiate.php] => Array
(
[11] => 1
[12] => -1
[13] => -1
[14] => -1
[15] => -1
[17] => -2
[21] => 1
[25] => 1
[26] => 1
[30] => 1
[32] => 1
)
)
{code}

derick

2018-12-23 21:12

administrator   ~0004780

I'm going to have to try this, but I'm pretty certain it's a similar issue as what I explained in this blog article: https://derickrethans.nl/breakpoints.html

theoboldt

2018-12-27 15:42

reporter   ~0004785

Good to hear that there might be a solution some day!

Just besides - I've no idea why the uploads except "multiline_class_instantiate.php" were added - I don't assume that any document or archive is helpful here. It's much likelier that they do have hazardous contents.

derick

2018-12-27 18:35

administrator   ~0004786

I've tried reproducing this, but I'm not having any luck. Would you mind adding phpinfo() output for both the CLI and PHP-FPM variants with the same PHP version (like in your original report). With as only change using -dhtml_errors=1 to the CLI variant, so that its phpinfo() output is also in HTML? (That makes it easier to diff them for me).

theoboldt

2018-12-28 09:05

reporter   ~0004789

I added the phpinfo() outputs as files. Unfortunately, although I was successfully able to enable html_errors=1, the output still wasn't wrapped by html. I added the textual phpinfo() output as well.

I also executed the phpinfo script with the built in HTTP server, which also uses the cli php configuration (possibly with some variations you might be more aware of). This environment is also not affected by the issue (as the cli isn't as well):

{code}


Array
(
[phpversion('xdebug')] => 2.6.0
[phpversion()] => 7.0.32-0ubuntu0.16.04.1
[php_sapi_name()] => cli-server
)
Array
(
[/intproj/users/erik/multiline_class_instantiate.php] => Array
(
[11] => 1
[12] => 1
[13] => 1
[14] => 1
[15] => 1
[21] => 1
[25] => 1
[26] => 1
[27] => 1
[28] => 1
[29] => 1
[30] => 1
[32] => 1
)
)
{code}

derick

2019-01-22 22:21

administrator   ~0004831

I'm going to have a look at this after Xdebug 2.7.0 has been released. Thanks for the feedback so far!

derick

2019-07-22 08:32

administrator   ~0005084

I reckon that just like with 0001541, you have xdebug.code_coverage=0 for this one as well?

theoboldt

2019-07-22 08:45

reporter   ~0005085

Exactly - I verified, if executed using

xdebug.code_coverage=1
, the issue is not occurring:


Array
(
[phpversion('xdebug')] => 2.6.0
[phpversion()] => 7.2.19-0ubuntu0.18.04.1
[php_sapi_name()] => fpm-fcgi
)
Array
(
[/intproj/users/erik/multiline_class_instantiate.php] => Array
(
[11] => 1
[12] => 1
[13] => 1
[14] => 1
[15] => 1
[21] => 1
[25] => 1
[26] => 1
[27] => 1
[28] => 1
[29] => 1
[30] => 1
[32] => 1
)

)

derick

2019-07-27 22:38

administrator   ~0005094

Fixed in 2.8.0beta2, by making sure there is a warning when you want to use code coverage when xdebug.code_coverage=0