I don't see a big problem exporting zif_pass, if this's really necessary.

Thanks. Dmitry.

________________________________
From: Nikita Popov <nikita....@gmail.com>
Sent: Saturday, April 30, 2016 8:40:54 PM
To: Derick Rethans
Cc: Dmitry Stogov; PHP Developers Mailing List
Subject: Re: [PHP-DEV] zend_pass_function/zif_pass

On Sat, Apr 30, 2016 at 7:12 PM, Derick Rethans 
<der...@php.net<mailto:der...@php.net>> wrote:
Hi!

I'm trying to make Xdebug up to date with master again, and after fixing
the static changes that Dmitry highlighted, I am still baffled by
something else.

My function traces now have an extra entry for each constructor - even
for classes that have no constructor, such as stdClass.

Code

<?php
$tf = xdebug_start_trace(sys_get_temp_dir() . '/'. uniqid('xdt', TRUE));

$a = new StdClass;

xdebug_stop_trace();
echo file_get_contents($tf);
?>

In PHP 7.1 (master) this generates:

                           => $tf = '/tmp/xdt5724dfa31b3050.51884776.xt' 
/home/derick/dev/php/derickr-xdebug/tests/assignment-trace11.php:2
    0.0017     386376     -> {main}() 
/home/derick/dev/php/derickr-xdebug/tests/assignment-trace11.php:0
                           => $a = class stdClass {  } 
/home/derick/dev/php/derickr-xdebug/tests/assignment-trace11.php:4
    0.0017     386472     -> xdebug_stop_trace() 
/home/derick/dev/php/derickr-xdebug/tests/assignment-trace11.php:6
    0.0018     386568

Where as in PHP 5.6 and 7.0, it generates:

TRACE START [2016-04-30 17:10:19]
                           => $tf = '/tmp/xdt5724e6fb674b31.38510038.xt' 
/home/derick/dev/php/derickr-xdebug/tests/assignment-trace11.php:2
                           => $a = class stdClass {  } 
/home/derick/dev/php/derickr-xdebug/tests/assignment-trace11.php:4
    0.0006     274008     -> xdebug_stop_trace() 
/home/derick/dev/php/derickr-xdebug/tests/assignment-trace11.php:6
    0.0006     274128
TRACE END   [2016-04-30 17:10:19]

The master version has the extra {main}, which comes from an additional
call to zend_execute_internal.

When looking into this, I see that that extra frame is a handle
zend_pass_function / zif_pass. How has this changed recently, and more
importantly, how can I detect this? I can't do "edata.func ==
zend_pass_function" as neither zend_pass_function or zif_pass are
exported symbols.

Any hints on how to handle this?

cheers,
Derick

Hey Derick!

This change is due to http://www.serverphorums.com/read.php?7,1439618,1439618 / 
https://github.com/php/php-src/commit/8e5b139732893d2a5f6ba3ae0a0b2b5cf6dba09f.

I don't see a good way for you to handle this as things stand now. I think we 
should export the zend_pass_function symbol.

Nikita

Reply via email to