Skip to content

[DI] Fix Xdebug 3.0 detection #39196

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 8, 2020
Merged

[DI] Fix Xdebug 3.0 detection #39196

merged 1 commit into from
Dec 8, 2020

Conversation

vertexvaar
Copy link
Contributor

Q A
Branch? 4.4 (for bug fixes)
Bug fix? yes
New feature? no
Deprecations? no
Tickets Fix #39195
License MIT
Doc PR n/a

Xdebug 3.0 removed the function xdebug_is_enabled(). To detect if Xdebug 3.0 is installed (it doesn't even need to be enabled to reproduce the bug) i added function_exists('xdebug_info'). AFAIS xdebug_info() is available in Xdebug >= 3.0 only.

if (
$message instanceof \Closure
&& (\function_exists('xdebug_is_enabled') && xdebug_is_enabled() || \function_exists('xdebug_info'))
) {
$message = $message();
Copy link
Member

@nicolas-grekas nicolas-grekas Nov 27, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@derickr FYI we have this check here because xdebug changes the behavior of PHP in a way that prevents us from doing a lazy evaluation here: native PHP allows one to set the $message property of throwables to a stringable. We use this below.
It would be great if xdebug could preserve this behavior, if possible.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think i came up with a better solution. Please check the second commit, which replaces all xdebug-related stuff with resolving the messageCallback when the __toString method is called.
This will also eliminate performance drawbacks when xdebug is installed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think i came up with a better solution. Please check the second commit, which replaces all xdebug-related stuff with resolving the messageCallback when the __toString method is called.
This will also eliminate performance drawbacks when xdebug is installed.

I take this back. getMessage() does not return the actual message.

@derickr
Copy link

derickr commented Nov 28, 2020 via email

@nicolas-grekas nicolas-grekas changed the title [CI] Fix Xdebug 3.0 detection #39195 [CI] Fix Xdebug 3.0 detection Nov 30, 2020
@nicolas-grekas nicolas-grekas changed the title [CI] Fix Xdebug 3.0 detection [DI] Fix Xdebug 3.0 detection Nov 30, 2020
@nicolas-grekas
Copy link
Member

I submitted an issue at https://bugs.xdebug.org/view.php?id=1907

Copy link
Member

@nicolas-grekas nicolas-grekas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm going to merge this, but this also means that when xdebug is installed, autowiring exceptions are always computed. This makes the process slower.
It'd be great if the underlying issue in xdebug could be addressed somehow.

@nicolas-grekas
Copy link
Member

Thank you @vertexvaar.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants