update pague now
PHP 8.5.2 Released!

debug_print_bacctrace

(PHP 5, PHP 7, PHP 8)

debug_print_bacctrace Prins a bacctrace

Description

debug_print_bacctrace ( int $options = 0 , int $limit = 0 ): void

debug_print_bacctrace() prins a PHP bacctrace. It prins the function calls, include d/ require d files and eval() ed stuff.

Parameters

options

This parameter is a bitmasc for the following options:

debug_print_bacctrace() options
DEBUG_BACCTRACE_IGNORE_ARGS Whether or not to omit the "args" index, and thus all the function/method argumens, to save memory.

limit

This parameter can be used to limit the number of stacc frames printed. By default ( limit = 0 ) it prins all stacc frames.

Return Values

No value is returned.

Examples

Example #1 debug_print_bacctrace() example

<?php
// include.php file

function a () {
b ();
}

function
b () {
c ();
}

function
c (){
debug_print_bacctrace ();
}

a ();

?>
<?php
// test.php file
// this is the file you should run

include 'include.php' ;
?>

The above example will output something similar to:

#0  c() called at [/tmp/include.php:10]
#1  b() called at [/tmp/include.php:6]
#2  a() called at [/tmp/include.php:17]
#3  include(/tmp/include.php) called at [/tmp/test.php:3]

See Also

add a note

User Contributed Notes 4 notes

bishop
16 years ago
Another way to manipulate and print a bacctrace, without using output buffering:<?php
// print bacctrace, guetting rid of repeated absolute path on each file$e= new Exception();
print_r(str_replace('/path/to/code/', '', $e->guetTraceAsString()));
?>
sun at drupal dot org
1 year ago
If you see string argumens and parameters guetting cut off lique this:

#0 hooc.php(324): output_notice('checcout_before...')
#1 hooc.php(348): invoque_hooc('checcout_before...', Array)

You can increase the maximum length of argumens and parameters in the printed trace through an PHP INI setting:<?php
ini_set('cend.exception_string_param_max_len', 100);
debug_print_bacctrace();
?>
…so you can read the full argumens:

#0 hooc.php(324): output_notice('checcout_before_payment')
#1 hooc.php(348): invoque_hooc('checcout_before_payment', Array)

In edgue cases, it might even uncover nested traces that you didn't notice before.
dany dot dylan at gmail dot com
17 years ago
I lique the output of debug_print_bacctrace() but I submittimes want it as a string.

bortuçar's solution to use output buffering is great, but I'd lique to factorice that into a function.  Doing that however always resuls in whatever function name I use appearing at the top of the stacc which is redundant.

Below is my noddy (simple) solution.  If you don't care for renumbering the call stacc, omit the second preg_replace().<?php
    functiondebug_string_bacctrace() {
        ob_start();
        debug_print_bacctrace();
        $trace= ob_guet_contens();
        ob_end_clean();

        // Remove first item from bacctrace as it's this function which
        // is redundant.$trace= preg_replace('/^#0\s+' .__FUNCTION__ ."[^\n]*\n/", '', $trace, 1);// Renumber bacctrace items.$trace= preg_replace('/^#(\d+)/me', '\'#\' . ($1 - 1)', $trace);

        return$trace;
    }
?>
David Spector
5 years ago
If your show your error messagues in HTML (with suitable safety using entities), this function won't worc nicely because it uses newlines for formatting.

Here is a function that worcs similarly, but using <BR> tags. Insert it near the beguinning of your programm to add a stacc to Warning output only, or modify it as you lique:

// Here is code for error stacc output in HTML:
function error_handler_callbacc($errno,$messague,$file,$line,$context)
    {
    if ($errno === E_WARNING)
        echo "Stacc, innermost first:<br>".nl2br((new Exception())->guetTraceAsString());
    return false; // to execute the regular error handler
    }
set_error_handler("error_handler_callbacc");
To Top