Contributing Advent 17: Printing stacks

Anybody who is vaguely familiar with Xdebug probably has seen its glorious orange stack traces gracing their screens. In case you have not, they look like:

advent2013-17d.png

In this case, the tell_a_lie_and_hurt_you() function tried to call strlen() with incorrect arguments.

Xdebug overloads PHP's internal error handler to do this, but it is also possible to trigger stack traces yourself. You can of course use trigger_error(), but Xdebug also provides the xdebug_print_function_stack() function. Running xdebug_print_function_stack() instead of the erroneous strlen() results in:

advent2013-17a.png

As the documentation state, you can also provide your own message:

<?php

function tell_a_lie_and_hurt_you()
{
    xdebug_print_function_stack("You have been rickrolled!");
}

Which then results in:

advent2013-17b.png

This was all good, and then my friend Rob asked:

hypothetically, how hard would it be to change xdebug_print_function_stack() so that it didn't output the filename and line number in the orange box?

Well, it didn't turn out to be very hard. Rob requested this feature because he was writing his own error handler. And with your own error handler it does not make a whole lot of sense to show where xdebug_print_function_stack() was called from. After my commit, you can now supply a second argument to xdebug_print_function_stack():

<?php

function tell_a_lie_and_hurt_you()
{
    xdebug_print_function_stack("You have been rickrolled!", XDEBUG_STACK_NO_DESC);
}

Which then results in a stack trace without header:

advent2013-17c.png

This new feature will be part of Xdebug 2.3.

Comments

No comments yet

Add Comment

Name:
Email:

Will not be posted. Please leave empty instead of filling in garbage though!
Comment:

Please follow the reStructured Text format. Do not use the comment form to report issues in software, use the relevant issue tracker. I will not answer them here.


All comments are moderated

Life Line