On Wed, 4 May 2016, Dmitry Stogov wrote: > I don't see a big problem exporting zif_pass, if this's really necessary.
Bob already committed that, and I've a PR for Xdebug too: https://github.com/xdebug/xdebug/pull/271/commits/c4a539d75f0d2546e9d0cb0dbc06f5a7a31f447e cheers, Derick > ________________________________ > 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 > -- http://derickrethans.nl | http://xdebug.org Like Xdebug? Consider a donation: http://xdebug.org/donate.php twitter: @derickr and @xdebug Posted with an email client that doesn't mangle email: alpine -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php