Skip to content

Query Monitor emits notices when 'file' and 'line' elements are not present in a stack trace #827

Open
@siliconforks

Description

@siliconforks

Consider the following shortcode:

function buggy_shortcode( $atts, $content, $shortcode_tag ) {
	throw new \Exception();
}

add_shortcode( 'buggy_shortcode', 'buggy_shortcode' );

If I visit a page with [buggy_shortcode], it will throw an exception and Query Monitor will display a stack trace, as expected, but if I look in the error log I see some additional notices (note that I have WP_DEBUG set to true):

PHP Notice:  Undefined index: file in .../query-monitor/collectors/php_errors.php on line 364
...
PHP Notice:  Undefined index: line in .../query-monitor/collectors/php_errors.php on line 364

If you look at the stack trace itself you can see the problem:

buggy_shortcode()
wp-includes/shortcodes.php:433

do_shortcode_tag()

preg_replace_callback()
wp-includes/shortcodes.php:273

do_shortcode()
wp-includes/class-wp-hook.php:310

...

Here do_shortcode() calls preg_replace_callback(), which calls do_shortcode_tag() as its callback. Therefore, do_shortcode_tag() is not being called from PHP code - it is being called from the PHP interpreter itself, so there is no .php file and line number. As a result, the stack trace is missing 'file' and 'line' elements.

This behavior does not appear to be explicitly documented anywhere, although it seems it is hinted at in https://www.php.net/manual/en/function.debug-backtrace.php where it says, "The possible [my emphasis] returned elements are as follows ... " - which suggests that the elements may or may not be present.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions