debug_print_backtrace

(PHP 5, PHP 7, PHP 8)

debug_print_backtrace Affiche la pile d'exécution PHP

Description

function debug_print_backtrace(int $options = 0, int $limit = 0): void

debug_print_backtrace() affiche la pile d'exécution de PHP. Elle affiche les appels aux fonctions, les fichiers inclus/requis par include/require ainsi que les appels à eval().

Liste de paramètres

options

Ce paramètre est un masque d'options suivantes :

Options pour debug_print_backtrace()
DEBUG_BACKTRACE_IGNORE_ARGS Si l'on doit omettre l'index "args" et ainsi, tous les arguments de la méthode/fonction pour préserver la mémoire.
DEBUG_BACKTRACE_PROVIDE_OBJECT Acceptée pour la compatibilité avec debug_backtrace(), mais sans effet : la trace générée est rendue sous forme de chaîne de caractères et l'entrée "object" n'est jamais affichée.
limit

Ce paramètre peut être utilisé pour limiter le nombre de trames de la pile à afficher. Par défaut (limit=0), toutes les trames de la pile seront affichées.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec debug_print_backtrace()

<?php
// fichier include.php

function a() {
    b();
}

function b() {
    c();
}

function c(){
    debug_print_backtrace();
}

a();

?>
<?php
// fichier test.php
// C'est le fichier à exécuter

include 'include.php';
?>

Résultat de l'exemple ci-dessus est similaire à :

#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]

Voir aussi

add a note

User Contributed Notes 4 notes

up
91
bishop
17 years ago
Another way to manipulate and print a backtrace, without using output buffering:

<?php
// print backtrace, getting rid of repeated absolute path on each file
$e = new Exception();
print_r(str_replace('/path/to/code/', '', $e->getTraceAsString()));
?>
up
5
sun at drupal dot org
1 year ago
If you see string arguments and parameters getting cut off like this:

#0 hook.php(324): output_notice('checkout_before...')
#1 hook.php(348): invoke_hook('checkout_before...', Array)

You can increase the maximum length of arguments and parameters in the printed trace through an PHP INI setting:

<?php
ini_set('zend.exception_string_param_max_len', 100);
debug_print_backtrace();
?>

…so you can read the full arguments:

#0 hook.php(324): output_notice('checkout_before_payment')
#1 hook.php(348): invoke_hook('checkout_before_payment', Array)

In edge cases, it might even uncover nested traces that you didn't notice before.
up
25
dany dot dylan at gmail dot com
17 years ago
I like the output of debug_print_backtrace() but I sometimes want it as a string.

bortuzar's solution to use output buffering is great, but I'd like to factorize that into a function.  Doing that however always results in whatever function name I use appearing at the top of the stack which is redundant.

Below is my noddy (simple) solution.  If you don't care for renumbering the call stack, omit the second preg_replace().

<?php
    function debug_string_backtrace() {
        ob_start();
        debug_print_backtrace();
        $trace = ob_get_contents();
        ob_end_clean();

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

        // Renumber backtrace items.
        $trace = preg_replace ('/^#(\d+)/me', '\'#\' . ($1 - 1)', $trace);

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

Here is a function that works similarly, but using <BR> tags. Insert it near the beginning of your program to add a stack to Warning output only, or modify it as you like:

// Here is code for error stack output in HTML:
function error_handler_callback($errno,$message,$file,$line,$context)
    {
    if ($errno === E_WARNING)
        echo "Stack, innermost first:<br>".nl2br((new Exception())->getTraceAsString());
    return false; // to execute the regular error handler
    }
set_error_handler("error_handler_callback");