PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

error_get_last> <debug_backtrace
Last updated: Fri, 19 Jun 2009

view this page in

debug_print_backtrace

(PHP 5)

debug_print_backtrace Prints a backtrace

Описание

void debug_print_backtrace ( void )

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

Список параметров

This function has no parameters.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Примеры

Пример #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';
?>

Результатом выполнения данного примера будет что-то подобное:

#0  eval() called at [/tmp/include.php:5]
#1  a() called at [/tmp/include.php:17]
#2  include(/tmp/include.php) called at [/tmp/test.php:3]

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

Смотрите также



error_get_last> <debug_backtrace
Last updated: Fri, 19 Jun 2009
 
add a note add a note User Contributed Notes
debug_print_backtrace
bradley dot giesbrecht at gmail dot com
14-Jan-2009 12:51
I was using the function by dany dot dylan at gmail dot com and found that preg_replace had string length limits. So here is yet another output format function.

<?php
if ( !function_exists ( "mydie" ) ) {
    function
mydie (  ) { $this_file = __FILE__ ; $this_line = __LINE__ ;
       
$buffer = array (  ) ;
       
$trace_calls = "" ;
       
ob_start (  ) ;
       
debug_print_backtrace (  ) ;
       
$buffer[ "0" ] = ob_get_contents (  ) ;
       
ob_end_clean (  ) ;
       
$buffer[ "0" ] = array_slice ( explode ( "#" , $buffer[ "0" ] ) , 1 , -1 , false ) ;
        foreach (
$buffer[ "0" ] as $key => $value ) {
           
$value = explode ( ") called at [" , $value ) ;
            if (
$key == 0 ) {
               
$value[ "0" ] = "0  " . __FUNCTION__ . "(see above vars)" ;
            }
           
$trace_calls .= "#" . implode ( ")\n\tcalled at [" , $value ) ;
        }
        unset (
$buffer , $key , $value ) ;
        echo
"<pre>function " . __FUNCTION__ . " lives here:{$this_file}:{$this_line}</pre>" ;
        echo (
"<pre>" . print_r( func_get_args (  ) , true ) . "</pre>" ) ;    
        if (
$trace_calls == "" ) $trace_calls = "No functions were called." ;
        echo (
"<pre>" . $trace_calls . "</pre>" ) ;    
        die ;
    }
}
function
a (  ) {
   
b ( func_get_args (  ) , 2 ) ;
}
function
b (  ) {
   
c ( func_get_args (  ) , 3 ) ;
}
function
c (  ) {
   
mydie ( func_get_args (  ) , 4 ) ;
}
a ( 1 ) ;
?>

## outputs
function mydie lives here:/path/file.php:4
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => 1
                        )

                    [1] => 2
                )

            [1] => 3
        )

    [1] => 4
)
#0  mydie(see above vars))
    called at [/path/file.php:54]
#1  c(Array ([0] => Array ([0] => 1),[1] => 2), 3)
    called at [/path/file.php:49]
#2  b(Array ([0] => 1), 2)
    called at [/path/file.php:43]
dany dot dylan at gmail dot com
11-Nov-2008 05:51
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;
    }
?>
mr dot davin at gmail dot com
23-Oct-2008 07:32
@harmor

Notice that the second line of the output outputs "::" instead of "->" when calling the function using an object.

Which is the resolved scope.
harmor
19-Feb-2008 09:54
Input (Using: PHP Version 5.2.5-pl1-gentoo):
<?php
class CTest
{
    public static function
say($a_szVar)
    {
       
debug_print_backtrace();
        echo
'<br />';
    }
}

CTest::say('static call');

$obj = new CTest;
$obj->say('object call');
   
?>

Output:
#0 CTest::say(static call) called at [C:\PHPDocument4.php:11]
#0 CTest::say(object call) called at [C:\PHPDocument4.php:15]

Notice that the second line of the output outputs "::" instead of "->" when calling the function using an object.
taner
21-Aug-2007 11:52
bortuzar: a simpler version, w/o output buffering:

<?php

$query
= sprintf("INSERT INTO EventLog (Trace) VALUES ('%s')",
   
mysql_real_escape_string(join("\n", debug_backtrace())) );
mysql_query($query);

?>
bortuzar at gmail dot com
05-Jun-2007 06:23
If you want to get the trace into a variable or DB, I suggest to do the following:

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

$query = sprintf("INSERT INTO EventLog (Trace) VALUES ('%s')",
           
mysql_real_escape_string($trace));
mysql_query($query);
?>
petermarkellis at googlemail dot com
28-Mar-2007 10:10
A cleaner example:
<?php
function a() {
  
b();
}

function
b() {
  
c();
}

function
c(){
  
debug_print_backtrace();
}

a();

?>

outputs:
#0  c() called at [C:\debugbacktracetest.php:7]
#1  b() called at [C:\debugbacktracetest.php:3]
#2  a() called at [C:\debugbacktracetest.php:14]
aidan at php dot net
15-Mar-2005 09:47
This functionality is now implemented in the PEAR package PHP_Compat.

More information about using this function without upgrading your version of PHP can be found on the below link:

http://pear.php.net/package/PHP_Compat

error_get_last> <debug_backtrace
Last updated: Fri, 19 Jun 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites