GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Downloads
  • Documentation
  • Get Involved
  • Help
  • Getting Started
  • Introduction
  • A simple tutorial
  • Language Reference
  • Basic syntax
  • Types
  • Variables
  • Constants
  • Expressions
  • Operators

This view

  • Original page
  • New address

GeezerVison is showing www.php.net — PHP: debug_print_backtrace - Manual

PHP 8.6.0 RC5 available for testing
    error_clear_last »
    « debug_backtrace
    • Preface
    • Function Reference
    • Affecting PHP's Behaviour
    • Error Handling
    • Error Handling Functions

    debug_print_backtrace

    (PHP 5, PHP 7, PHP 8)

    debug_print_backtrace — Prints a backtrace

    Description

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

    debug_print_backtrace() prints a PHP backtrace. It prints the function calls, included/required files and eval()ed stuff.

    Parameters

    options

    This parameter is a bitmask for the following options:

    debug_print_backtrace() options
    DEBUG_BACKTRACE_IGNORE_ARGS Whether or not to omit the "args" index, and thus all the function/method arguments, to save memory.
    DEBUG_BACKTRACE_PROVIDE_OBJECT Accepted for compatibility with debug_backtrace(), but has no effect: the generated backtrace is rendered as a string and the "object" entry is never printed.

    limit

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

    Return Values

    No value is returned.

    Examples

    Example #1 debug_print_backtrace() example

    <?php
    // include.php file
    
    function a() {
        b();
    }
    
    function b() {
        c();
    }
    
    function c(){
        debug_print_backtrace();
    }
    
    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

    • debug_backtrace() - Generates a backtrace

    Found A Problem?

    Learn How To Improve This Page • Submit a Pull Request • Report a Bug
    +add a note

    User Contributed Notes 4 notes

    up
    down
    90
    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
    down
    5
    sun at drupal dot org ¶
    2 years 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
    down
    25
    dany dot dylan at gmail dot com ¶
    18 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
    down
    -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");
    +add a note
    • Error Handling Functions
      • debug_​backtrace
      • debug_​print_​backtrace
      • error_​clear_​last
      • error_​get_​last
      • error_​log
      • error_​reporting
      • get_​error_​handler
      • get_​exception_​handler
      • restore_​error_​handler
      • restore_​exception_​handler
      • set_​error_​handler
      • set_​exception_​handler
      • trigger_​error
      • user_​error
    You are visitor 01402503 — GeezerVison does not store the pages you look up.
    Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.