Php debug backtrace function

PHP debug_backtrace() Function

The debug_backtrace() function generates a PHP backtrace.

This function displays data from the code that led up to the debug_backtrace() function.

Returns an array of associative arrays. The possible returned elements are:

  • Returns: «->» — Method call
  • Returns: «::» — Static method call
  • Returns nothing — Function call

Syntax

Parameter Values

Parameter Description
options Optional. Specifies a bitmask for the following options:
DEBUG_BACKTRACE_PROVIDE_OBJECT (Whether or not to populate the «object» index
DEBUG_BACKTRACE_IGNORE_ARGS (Whether or not to omit the «args» index, and all the function/method arguments, to save memory)
limit Optional. Limits the number of stack frames printed. By default (limit=0) it prints all stack frames

Technical Details

Return Value: An array of associative arrays
PHP Version: 4.3+
PHP Changelog: PHP 5.4: The optional parameter limit was added
PHP 5.3.6: The parameter provide_object was changed to options and additional option DEBUG_BACKTRACE_IGNORE_ARGS is added
PHP 5.2.5: The optional parameter provide_object was added
PHP 5.1.1: Added the current object as a possible return element

PHP Error Reference

Unlock Full Access 50% off

COLOR PICKER

colorpicker

Join our Bootcamp!

Report Error

If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:

Thank You For Helping Us!

Your message has been sent to W3Schools.

Top Tutorials
Top References
Top Examples
Get Certified

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Источник

debug_print_backtrace

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

Parameters

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.

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

Return Values

Examples

Example #1 debug_print_backtrace() example

function c () debug_print_backtrace ();
>

// test.php file
// this is the file you should run

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

User Contributed Notes 5 notes

Another way to manipulate and print a backtrace, without using output buffering:

// print backtrace, getting rid of repeated absolute path on each file
$e = new Exception ();
print_r ( str_replace ( ‘/path/to/code/’ , » , $e -> getTraceAsString ()));
?>

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().

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 );

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 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:
«.nl2br((new Exception())->getTraceAsString());
return false; // to execute the regular error handler
>
set_error_handler(«error_handler_callback»);

Here’s a function that returns a string with the same information shown in debug_print_backtrace(), with the option to exclude a certain amount of traces (by altering the $traces_to_ignore argument).

I’ve done a couple of tests to ensure that it prints exactly the same information, but I might have missed something.

This solution is a nice workaround to get the debug_print_backtrace() information if you’re already using ob_start() in your PHP code.

function get_debug_print_backtrace ( $traces_to_ignore = 1 ) $traces = debug_backtrace ();
$ret = array();
foreach( $traces as $i => $call ) if ( $i < $traces_to_ignore ) continue;
>

$object = » ;
if (isset( $call [ ‘class’ ])) $object = $call [ ‘class’ ]. $call [ ‘type’ ];
if ( is_array ( $call [ ‘args’ ])) foreach ( $call [ ‘args’ ] as & $arg ) get_arg ( $arg );
>
>
>

$ret [] = ‘#’ . str_pad ( $i — $traces_to_ignore , 3 , ‘ ‘ )
. $object . $call [ ‘function’ ]. ‘(‘ . implode ( ‘, ‘ , $call [ ‘args’ ])
. ‘) called at [‘ . $call [ ‘file’ ]. ‘:’ . $call [ ‘line’ ]. ‘]’ ;
>

function get_arg (& $arg ) if ( is_object ( $arg )) $arr = (array) $arg ;
$args = array();
foreach( $arr as $key => $value ) if ( strpos ( $key , chr ( 0 )) !== false ) $key = » ; // Private variable found
>
$args [] = ‘[‘ . $key . ‘] => ‘ . get_arg ( $value );
>

$arg = get_class ( $arg ) . ‘ Object (‘ . implode ( ‘,’ , $args ). ‘)’ ;
>
>
?>

Источник

debug_backtrace

debug_backtrace() generates a PHP backtrace.

Parameters

This parameter is a bitmask for the following options:

debug_backtrace() options

DEBUG_BACKTRACE_PROVIDE_OBJECT Whether or not to populate the «object» index.
DEBUG_BACKTRACE_IGNORE_ARGS Whether or not to omit the «args» index, and thus all the function/method arguments, to save memory.

Note:

There are four possible combinations:

debug_backtrace() options
debug_backtrace() Populates both indexes
debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT)
debug_backtrace(1)
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS & DEBUG_BACKTRACE_PROVIDE_OBJECT) Omits index «object» .
debug_backtrace(0)
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) Omits index «object» and index «args» .
debug_backtrace(2)

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

Return Values

Returns an array of associative array s. The possible returned elements are as follows:

Possible returned elements from debug_backtrace()

Name Type Description
function string The current function name. See also __FUNCTION__.
line int The current line number. See also __LINE__.
file string The current file name. See also __FILE__.
class string The current class name. See also __CLASS__
object object The current object.
type string The current call type. If a method call, «->» is returned. If a static method call, «::» is returned. If a function call, nothing is returned.
args array If inside a function, this lists the functions arguments. If inside an included file, this lists the included file name(s).

Examples

Example #1 debug_backtrace() example

function a_test ( $str )
echo «\nHi: $str » ;
var_dump ( debug_backtrace ());
>

a_test ( ‘friend’ );
?>

// filename: /tmp/b.php
include_once ‘/tmp/a.php’ ;
?>

Results similar to the following when executing /tmp/b.php :

Hi: friend array(2) < [0]=>array(4) < ["file"] =>string(10) "/tmp/a.php" ["line"] => int(10) ["function"] => string(6) "a_test" ["args"]=> array(1) < [0] =>&string(6) "friend" > > [1]=> array(4) < ["file"] =>string(10) "/tmp/b.php" ["line"] => int(2) ["args"] => array(1) < [0] =>string(10) "/tmp/a.php" > ["function"] => string(12) "include_once" > >

See Also

Источник

debug_backtrace

debug_backtrace() выводит стек вызовов функций PHP в массив.

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

В версии 5.3.6, этот аргумент является битовой маской для следующих настроек:

Настройки debug_backtrace()
DEBUG_BACKTRACE_PROVIDE_OBJECT Требуется или нет заполнять данные «объектов».
DEBUG_BACKTRACE_IGNORE_ARGS Требуется или нет не выводить данные с индексом «args», то есть списки аргументов всех функций/методов, для уменьшения расхода памяти.

До версии 5.3.6 принимаются только значения TRUE или FALSE , которые означают, задана настройка DEBUG_BACKTRACE_PROVIDE_OBJECT или нет соответственно.

В версии 5.4.0, этот аргумент используется для ограничения количества вызовов функций, которые будут выведены. По умолчанию ( limit =0) будет выведен весь стек вызовов.

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

Возвращает массив вложенных ассоциативных массивов ( array ). Описание элементов массива приведено ниже:

Список возможных значений элементов массивов, возвращаемых функцией debug_backtrace()

Имя Тип Описание
function string Имя текущей функции. См. также __FUNCTION__.
line integer Текущий номер строки. См. также __LINE__.
file string Имя текущего файла. См. также __FILE__.
class string Имя текущего класса. См. также __CLASS__
object object Текущий объект.
type string Текущий тип вызова функции. Если это вызов метода объекта, будет выведено «->». Если это вызов статического метода класса, то «::». Если это простой вызов функции, не выводится ничего.
args array При нахождении внутри функции, будет выведен список аргументов этой функции. Если внутри включаемого файла, будет выведен список включаемых файлов.

Список изменений

Версия Описание
5.4.0 Добавлен необязательный аргумент limit .
5.3.6 Аргумент provide_object заменен на options и добавлена дополнительная настройка DEBUG_BACKTRACE_IGNORE_ARGS .
5.2.5 Добавлен необязательный аргумент provide_object .
5.1.1 Элементом возвращаемого массива теперь может быть текущий объект object .

Примеры

Пример #1 Пример использования debug_backtrace()

function a_test ( $str )
echo «\nHi: $str » ;
var_dump ( debug_backtrace ());
>

a_test ( ‘friend’ );
?>

// filename: /tmp/b.php
include_once ‘/tmp/a.php’ ;
?>

Результат аналогичен приведенному ниже, если запустить /tmp/b.php :

Hi: friend array(2) < [0]=>array(4) < ["file"] =>string(10) "/tmp/a.php" ["line"] => int(10) ["function"] => string(6) "a_test" ["args"]=> array(1) < [0] =>&string(6) "friend" > > [1]=> array(4) < ["file"] =>string(10) "/tmp/b.php" ["line"] => int(2) ["args"] => array(1) < [0] =>string(10) "/tmp/a.php" > ["function"] => string(12) "include_once" > >

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

  • trigger_error() — Вызывает пользовательскую ошибку/предупреждение/уведомление
  • debug_print_backtrace() — Выводит стек вызовов функций

Источник

Читайте также:  Creating charts in java
Оцените статью